我有一个我的博客条目列表,它们都是英语语言,但有些是西班牙语......为了在西班牙语中正确使用它我使用以下sql语句:
SELECT *
FROM blog_items
JOIN blog_items_trans on blog_items.id = blog_items_trans.element_id
WHERE blog_items.parent_id = 0
AND blog_items_trans.language = 'es'
我需要实现blog_items_trans.language = 'es'
我尝试在AND
之后添加:blog_items_trans.language = 'es' OR blog_items_trans.language = 'en'
,但我从两个语言中获取了所有元素。
如果西班牙语中不存在某个元素,那么我该怎么检查那里呢?
答案 0 :(得分:1)
问题是您正在将OR
子句与WHERE
子句组合在一起。如果没有括号,OR
子句并不专门与AND
子句对应,而是在其前面的所有。也就是说,您的初始代码会尝试抓取西班牙语中两者的任何行,并且没有父级, OR 的英语(可能没有父级)
没有括号,这相当于:
SELECT *
FROM blog_items
JOIN blog_items_trans on blog_items.id = blog_items_trans.element_id
WHERE (blog_items.parent_id = 0 AND blog_items_trans.language) = 'es'
OR blog_items_trans.language = 'en'
为了确保您只抓取没有英语或西班牙语 父母的行,只需在AND
语句中添加括号:
SELECT *
FROM blog_items
JOIN blog_items_trans on blog_items.id = blog_items_trans.element_id
WHERE blog_items.parent_id = 0
AND (blog_items_trans.language = 'es' OR blog_items_trans.language = 'en')
希望这有帮助! :)