我从两个表中选择并将连接保持为第三个有问题。查询:
SELECT
c.id AS currency, u.user, us.enabled AS currency
FROM
users AS u,
currency AS c
LEFT JOIN users_settings AS us ON(c.id=us.currency, u.user=us.user)
WHERE
c.off=0 AND c.disabled=0 AND c.status=1
错误:
#1054
- “字段列表”中的未知列“u.user”
我需要用户和货币的笛卡尔积。 用户:id,login,email,pass
答案 0 :(得分:4)
您正在混合显式和隐式连接语法。试试这个:
SELECT c.id AS currency, u.user, us.enabled AS currency
FROM currency AS c LEFT JOIN
users_settings AS us
ON c.id = us.currency LEFT JOIN
users u
on u.user = us.user
WHERE c.off = 0 AND c.disabled = 0 AND c.status = 1 ;
MySQL不一定允许通过,
知道字段。范围界定是,
和cross join
之间的差异之一。但是,无论如何,您应该为每个on
使用单独的join
子句。
以下是documentation:
中的说明INNER JOIN和(逗号)在没有的情况下在语义上是等价的 连接条件:两者之间产生笛卡尔积 指定的表(即第一个表中的每一行都是 加入第二个表格中的每一行。)
但是,逗号运算符的优先级小于INNER JOIN,CROSS JOIN,LEFT JOIN等等。如果你混合使用逗号连接 当有连接条件时,其他连接类型,错误 form可能会出现'on子句'中的未知列'col_name'。信息 关于这个问题的处理将在本节后面给出。
不要试图真正理解这意味着什么,而是避免在,
子句中使用from
。它永远不需要。