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

标签 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的所有产品表其 id new_product 中不存在(product_id 是相关的列)。我想 WHERE (product.id <> new_product.product_id)部分应该可以解决问题。我的坏在哪里?谢谢!

最佳答案

  • 无论何时使用Left Join,请确保Left Join 右侧表中的Where 条件在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

关于mysql - 从表 1 中获取表 2 中未显示的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161242/

相关文章:

php - FireBird CodeIgniter 多数据库连接

php - MySQL中出现的转义字符

mysql - WHERE 子句中的 SELECT 语句之一

php - CakePHP 3 - 关联表的所有权授权

PHP - MYSQL 从 while 循环中过滤包含任何指定单词的变量

Mysql 选择某种语言的字段

mysql - mysql UPDATE 比 INSERT INTO 快吗?

php - mysql php jquery 隐藏显示选择

Mysql 将列从 'allow null' 更改为 'not null' 并设置值

MySQL 外键多重连接