mysql SELECT FROM两个表和LEFT JOIN

时间:2014-01-27 19:04:47

标签: mysql sql

我从两个表中选择并将连接保持为第三个有问题。查询:

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

http://en.wikipedia.org/wiki/Cartesian_product

1 个答案:

答案 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。它永远不需要。