我正在尋找DISTINCT子句在SQL中的工作原理(SQL Server 2008如果這有所作爲)在多個表連接的查詢上的答案?SQL的DISTINCT子句如何工作?
我指的是SQL引擎如何處理與DISTINCT子句的查詢?
的原因,我問的是,我被我更有經驗的同事告訴記者,SQL DISTINCT適用於每個表的各個領域。這似乎不太可能,但我要確保....
例如有兩個表:
CREATE TABLE users
(
u_id INT PRIMARY KEY,
u_name VARCHAR(30),
u_password VARCHAR(30)
)
CREATE TABLE roles
(
r_id INT PRIMARY KEY,
r_name VARCHAR(30)
)
CREATE TABLE users_l_roles
(
u_id INT FOREIGN KEY REFERENCES users(u_id) ,
r_id INT FOREIGN KEY REFERENCES roles(r_id)
)
,然後有此查詢:
SELECT u_name
FROM users
INNER JOIN users_l_roles ON users.u_id = users_l_roles.u_id
INNER JOIN roles ON users_l_roles.r_id = roles.r_id
假設有用戶有兩個角色,那麼上述查詢將返回兩個具有相同用戶名的記錄。
但此查詢具有鮮明:
SELECT DISTINCT u_name
FROM users
INNER JOIN users_l_roles ON users.u_id = users_l_roles.u_id
INNER JOIN roles ON users_l_roles.r_id = roles.r_id
將返回只有一個用戶名。
問題是SQL是否會比較所有連接表(u_id,u_name,u_password,r_id,r_name)中的所有字段,還是隻比較查詢中的命名字段(u_name)並區分結果?
你shuold檢查你的SQL引擎決定如何處理你的語法解釋計劃。 – Randy