Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何排除具有内部/左侧联接的记录_Mysql - Fatal编程技术网

Mysql 如何排除具有内部/左侧联接的记录

Mysql 如何排除具有内部/左侧联接的记录,mysql,Mysql,有一个名为order\u flags的表,我正试图加入orders表,其中orders.id是order\u flags中的外键,如order\u fk。我只需要排除外键记录为'order\u flags.flag'字段设置了值7的订单。下面我尝试的SQL返回空记录。我希望这将返回所有记录,除了order_flags表中标志字段的值为7的记录。问题中的表格如下: 如果在WHERE子句中提到左联接表中的列,则将联接转换为内部联接 你有这个 FROM orders

有一个名为
order\u flags
的表,我正试图加入
orders
表,其中orders.id是
order\u flags
中的外键,如
order\u fk
。我只需要排除外键记录为'order\u flags.flag'字段设置了值
7
的订单。下面我尝试的SQL返回空记录。我希望这将返回所有记录,除了order_flags表中标志字段的值为7的记录。问题中的表格如下:


如果在WHERE子句中提到左联接表中的列,则将联接转换为内部联接

你有这个

   FROM   orders 
      ...
   LEFT JOIN order_flags 
          ON order_flags.order_fk = orders.id 
      ...   
   WHERE ...  order_flags.flag != '7' 
尝试像这样将筛选器移动到ON子句

   FROM   orders 
      ...
   LEFT JOIN order_flags 
          ON order_flags.order_fk = orders.id 
         AND order_flags.flag != '7'
      ...   
   WHERE ... 
或者试试这个

 WHERE ... (order_flags.flag IS NULL OR order_flags.flag != '7')

为什么会发生这种情况?如果左侧联接左侧的行与右侧的行不匹配,则联接的结果集左侧的列为空。空值很奇怪。它们不等于任何东西,它们也不等于任何东西。因此,您的WHERE筛选器删除了大量行。

请发布表结构和所需输出。很难确定您想要实现什么。您的问题涉及2个表-您的查询中有5个-我建议您首先根据问题中提到的2个表构建一个查询,以查看您是否获得了所需的结果结果然后一次添加所有其他联接和条件1。或者您可以将所有表定义、样本数据和预期输出作为文本添加到问题中。Umair,抱歉没有描述我的目标。我试图加入的表格显示在编辑后的表格中。@P.Salmon,按照建议添加了表格。我们喜欢文本中的表格的原因是我们不能使用图像。请注意:像您问题中的那样的大型查询通常很难让人理清。如果你能把它拆下来,我们会更容易帮你。而且,更好的是,你也许能够解决你自己的问题。查找“橡胶鸭调试”O.Jones,其中。。。(order_flags.flag为空或order_flags.flag!=“7”)有效。谢谢你的帮助。是的,我理解将查询分条的重要性,这样不仅可以帮助我解决问题,而且可以帮助我解决问题。
 WHERE ... (order_flags.flag IS NULL OR order_flags.flag != '7')