2012-10-06 68 views
0

mysql查詢令我煩惱。我有一些JavaScript,讓用戶通過在兩個桶(盒)之間來回移動它們來將人員分配給一個類別。第一個桶應該是除第二個桶(分配給類別)之外的所有人。第二個桶由一個類別中的人員組成。因此,我需要一個用於第一個桶的mysql查詢,該查詢抽取除第二個查詢(分配給類別)中拉出的所有人之外的所有人。MYSQL語法連接不等於

我有一個所有人的表和第二個分配到類別的人。 (這裏還有第三個類別被忽略的表格)。下面的代碼返回第二個存儲區(類別中的那些存儲)的選定組,但是對於第一個存儲桶,只有當我希望它包含人員誰甚至不出現在貓人桌上。

我認爲問題與NULL或我的連接有關,但無法弄清楚。希望任何建議:

id | name 

catpeople

id | catid | peopleid 

首先查詢應該把所有的人,除了那些在第二個查詢,但只拉人誰在catpeople表中顯示出來。

$sql1 = "SELECT * FROM `people` c 
LEFT JOIN `catpeople` c 
on p.id = c.peopleid 
WHERE catid <> '2'"; 

第二查詢工作正常工作(拉類別的人)

$sql2 = "SELECT * FROM `people` p 
LEFT JOIN `catpeople` c 
on p.id = c.peopleid 
WHERE catid = '2'"; 

回答

2

catpeople.catid='2'WHERE讓你JOIN內。如果你需要所有的人都動條件ON

$sql1 = "SELECT * FROM `people` p 
LEFT JOIN `catpeople` c 
ON (p.id = c.peopleid AND catid <> '2')"; 

如果我明白你的問題的權利,你需要修改這個查詢了一下:

$sql1 = "SELECT p.* FROM `people` p 
LEFT JOIN `catpeople` c 
ON (p.id = c.peopleid AND catid <> '2')" 
WHERE c.id IS NULL ; -- I guess c.id is a primary key in catpeople. 
--now it returns rows in people table that have no rows 
--associated with them in catpeople (or rows with catid =2 or catid is null) 
0

LEFT JOIN會拉人反正。使用INNER JOIN代替:

$sql1 = "SELECT * FROM `people` c 
INNER JOIN `catpeople` c 
on p.id = c.peopleid AND catid <> 2; 
+0

在這種情況下並不重要。 'WHERE catid <>'2'過濾掉'cat'中沒有相應記錄的'people'中的記錄,所以'LEFT JOIN'與'INNER'的行爲完全相同(在這種情況下,再次) – a1ex07