2010-07-21 80 views
1

的列以Z不存在的列的Z值I有2表項和item_relationsPHP MySQL的:從表A中獲得行,其中表A表B中

項已經4列ROW_ID(主鍵),story_id, field1和field2

item_relation存儲項目表中每行的關係,它有2列parent_story_id和child_story_id。兩列都存儲來自項目的行的story_id。

父項可以有多個子項,而子項可以有一個或多個父項。但是一個子項目不能有自己的子項目。

現在我想從哪個items.story_id中不存在item_relation.child_story_id

我如何去這樣做的項目選擇行?

回答

3

我想選擇的項目行鍼對items.story_id中不存在item_relation.child_story_id

你可以使用NOT IN,NOT EXISTS或LEFT JOIN/WHERE ... IS NULL。

用一個例子NOT IN:

SELECT * 
FROM items 
WHERE items.story_id NOT IN (
    SELECT child_story_id FROM item_relation 
) 

與LEFT一個例子JOIN/WHERE ... IS NULL:

SELECT items.* 
FROM items 
LEFT JOIN item_relation 
ON items.story_id = item_relation.child_story_id 
WHERE item_relation.child_story_id IS NULL 

與不舉例存在:

SELECT * 
FROM items 
WHERE NOT EXISTS (
    SELECT NULL 
    FROM item_relation 
    WHERE item_relation.child_story_id = items.story_id 
) 

文章NOT IN vs. NOT EXISTS vs. LEFT JOIN/IS NULL: MySQLQuassnoi解釋這些技術之間的差異,並比較它們性能。摘要:

這就是爲什麼最好的辦法尋找失蹤MySQL中值是使用LEFT JOIN/IS NULL或NOT IN,而不是不存在。

相關問題