SQL:内部 JOIN 语句没有给出正确的记录 [关闭]
Posted
技术标签:
【中文标题】SQL:内部 JOIN 语句没有给出正确的记录 [关闭]【英文标题】:SQL: Inner JOIN statement doesn't give the right records [closed] 【发布时间】: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';
【参考方案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';
【讨论】:
以上是关于SQL:内部 JOIN 语句没有给出正确的记录 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别
关于SQL数据库中cross join 和inner join用法上的区别?