2010-07-21 54 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,而不是不存在。

相关问题