我有一个items
表和一个tags
表,它们通过user_tags
表链接。我有一个查询,查找具有特定标记的所有项目:
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 :(得分: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;
答案 1 :(得分: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
答案 2 :(得分: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)