从表1中获取未在表2中显示的记录

时间:2018-11-05 19:51:28

标签: mysql

此查询出了什么问题

SELECT `product`.`id`, `title` AS `text` FROM `product` 
LEFT JOIN `productlang` ON product.id=productlang.product_id 
LEFT JOIN `new_product` ON product.id=new_product.product_id 
WHERE (`product`.`id` <> `new_product`.`product_id`) 
AND (`title` LIKE '%nik%') 
AND (`language`='bg') 
LIMIT 20

目的是从product表中不存在{{1}的id表中获得所有产品(new_product是相关列)。 }}部分应该可以解决问题。我哪里不好?谢谢!

1 个答案:

答案 0 :(得分:1)

  • 无论何时使用Left Join,请确保在Where子句中指定了Left Join右侧表上的On条件。否则,这会限制您的结果集。
  • 要检查右侧表中是否没有匹配的条目,我们可以使用IS NULL
  • 出于可读性和清晰度的目的,在处理多表查询时,请使用正确的aliasing

请尝试以下操作:

SELECT p.id, 
       pl.title AS `text` 
FROM product AS p 
LEFT JOIN productlang AS pl  
  ON p.id = pl.product_id AND 
     pl.title LIKE '%nik%' AND 
     pl.language = 'bg' 
LEFT JOIN new_product AS np 
  ON p .id = np.product_id 
WHERE np.product_id IS NULL 
LIMIT 20