2013-01-21 25 views
1

我有一个items表和tags表,它们通过user_tags表链接在一起。我有一个发现与特定标签的所有项目的查询:查找在MySQL链接表中没有任何条目的项目

self::factory('item') 
    ->join('user_tags', 'INNER')->on('items.id', '=', 'user_tags.item_id') 
    ->join('tags', 'INNER')->on('user_tags.tag_id', '=', 'tags.id') 
    ->where('tags.title', 'IN', $array_of_tags); 

或不Kohana的ORM:

SELECT items.* 
FROM items 
INNER JOIN user_tags ON items.id = user_tags.item_id 
INNER JOIN tags ON user_tags.tag_id = tags.id 
WHERE tags.title IN ($array_of_tags); 

我想找到有没有相关的标签他们的所有项目。我将如何做到这一点?

+0

您有2个标签table:tags ans user tags?哪些标签是你不想要的? – GeorgeVremescu

回答

1

只需添加另一个地方条件

SELECT 
    items.* 
FROM items 
LEFT JOIN user_tags ON items.id = user_tags.item_id 
LEFT JOIN tags ON user_tags.tag_id = tags.id 
WHERE tags.title IN ($array_of_tags) 
AND user_tags.tag_id IS NULL; 
0

试试这个::

SELECT items.* 
FROM items 
LEFT JOIN user_tags ON items.id = user_tags.item_id 
LEFT JOIN tags ON user_tags.tag_id = tags.id 
WHERE 
user_tags.tag_id is null 
AND tags.title IN ($array_of_tags) 
+0

内心会不会这样做 –

+0

为什么会降票? –

+0

@raheelshan:感谢您指出它,更新了我的查询... :-) –

1

切换你的内连接至左连接

SELECT items.* 
FROM items 
LEFT JOIN user_tags ON items.id = user_tags.item_id 
LEFT JOIN tags ON user_tags.tag_id = tags.id 
WHERE (tags.title IN ($array_of_tags) or tags.title is null) 
and user_tags.item_Id is null. 

记住SQL是不是远远超过设置逻辑。

这里有一个链接来帮助解释不同类型的连接。

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

相关问题