【问题标题】:SQL: Inner JOIN statement doesn't give the right records [closed]SQL:内部 JOIN 语句没有给出正确的记录 [关闭]
【发布时间】:2022-01-03 13:23:33
【问题描述】:

使用下面的 SQL,我正在尝试从右表“order_flags”中记录所有匹配的行。

 SELECT id, 
        po_number, 
        alert 
 FROM orders 
 INNER JOIN order_flags on order_flags.order_fk 
 WHERE order_flags.alert = " date("Y-m-d") . "
 AND order_flags.order_fk = orders.id 
 AND orders.flag_overdue_po='1';

表格如下。第一个是orders 表,第二个是order_flags 表。

【问题讨论】:

  • 连接的on 子句应该包含某种比较,例如on users.department_id = departments.id 或类似的。你的只包含一个片面的表达式,所以它可能总是评估为真。修改您对 JOIN 的理解并查看一些示例。
  • " date("Y-m-d") . " - 我什至猜不出这是什么意思 -
  • 也许 `order_flags.order_fk = orders.id` 应该是加入条件?
  • @P.Salmon 是真的。将一些 PHP 放入字符串中可能是一次拙劣的尝试。我刚刚删除了 PHP 标记,虽然现在您已经指出了这一点,但可能是有原因的。他们没有理由不能只使用 SQL 生成日期。
  • SELECT id, po_number, alert FROM orders INNER JOIN order_flags on order_flags.order_fk = orders.id WHERE order_flags.alert = 'your date' AND orders.flag_overdue_po='1';

标签: mysql sql join


【解决方案1】:

没有进一步调查,但您的 ON 语句只包含一个值。它需要两个表的两个匹配列,例如

ON table1.column_id = table2.column_id

【讨论】:

  • 一般来说不正确。 ON clause 表达式必须返回可以被视为布尔值的标量值,而不是更多。没有其他限制。
【解决方案2】:

如果不确定相关记录一定存在于order_flags中,请使用左连接。sql可能

SELECT id, 
        po_number, 
        alert 
 FROM orders 
 LEFT JOIN order_flags on order_flags.order_fk = orders.id
 WHERE order_flags.alert = " date("Y-m-d") . "
 AND orders.flag_overdue_po='1';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多