我有如下SQL语句
SELECT be.*, it.order_number
FROM songs AS be
INNER JOIN
(
SELECT song_id, order_number
FROM items
WHERE order_status = 1
) it
ON be.id = it.song_id
INNER JOIN orders AS or
ON it.order_number = or.order_number
WHERE be.active = 0
我似乎不明白为什么这个声明没有产生任何结果。当我删除以下行时;
INNER JOIN orders AS or
ON it.order_number = or.order_number
它似乎产生了结果,而且我知道 order_number
确实存在于 orders
表中 - 所以它显然是不正确的语法,但我不确定该去哪里从这里?感谢您的帮助。
最佳答案
此特定实例中的问题是查询中的 或
是保留字。如果你愿意,你可以使用它,但你必须引用它,就像这样
SELECT be.*, it.order_number
FROM songs AS be
INNER JOIN
(
SELECT song_id, order_number
FROM items
WHERE order_status = 1
) it
ON be.id = it.song_id
INNER JOIN orders AS "or"
ON it.order_number = "or".order_number
WHERE be.active = 0
一般来说,为了可读性,我会避免使用这样的名称。如果你必须引用它或转义它,它可能是一个糟糕的名字。
关于带有 INNER JOIN 的 MySQL SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573850/