如何加入很多桌子?

时间:2013-06-22 10:46:05

标签: mysql join

我对JOIN表如何工作感到非常困惑。我试图阅读所有可能的文档而没有得到任何好处。

我正在尝试在各种表上执行大SELECT以获取特定用户的所有数据。以下查询似乎永远循环,没有任何好结果。

任何人都可以用最简单的方式以正确的方式解释JOIN吗? 感谢

SELECT user.id_user, name, surname, email, password, status, phone, address, city, zip_code, company_name, cf, piva, public, icon, description, note, web, facebook_id, facebook_token, twitter_id, twitter_token, linkedin_id, linkedin_token, ip, date, link, confirmed, newsletter, legal_validation FROM user,user_addfields_anagraphic,user_addfields_legal,user_addfields_public,user_addfields_social,user_registration WHERE user.id_user = '43534534534'

3 个答案:

答案 0 :(得分:2)

您没有以任何有意义的方式将表格连接在一起,因此您最终会得到一个笛卡尔积,这是每一行与其他行连接的地方。

你必须在每个表中找到允许彼此相关的列(它是我们正在处理的关系数据库)。

因此,如果您想知道哪个员工在某个部门,您会做类似

的事情
select name, department 
from employee emp join Department d 
on emp.dept_no = d.dept_no
where dept.description = "SALES"

要识别的关键是连接条件 - 它指定了如何将一个表的内容与另一个表的内容相关联。

你的陈述非常复杂 - 我建议把它分解成更小的块。获取两个表连接,然后逐步添加其他表。

答案 1 :(得分:1)

尝试

   SELECT table1.* , 
   table2.* , 
   table3.* 
   FROM table1 
   JOIN table2 ON .... 
   JOIN table3 ON....

答案 2 :(得分:0)

您需要加入其他表格。我在你的where子句中找不到这个

你可以这样做:

SELECT user.id_user, name, surname, email, password, status, phone, address, city, zip_code, company_name, cf, piva, public, icon, description, note, web, facebook_id, facebook_token, twitter_id, twitter_token, linkedin_id, linkedin_token, ip, date, link, confirmed, newsletter, legal_validation
FROM user
INNER JOIN user_addfields_anagraphic on user.user_id = user_addfields_anagraphic.user_id
...
WHERE user.id_user = '43534534534'

或者像这样(这是相同的)

SELECT user.id_user, name, surname, email, password, status, phone, address, city, zip_code, company_name, cf, piva, public, icon, description, note, web, facebook_id, facebook_token, twitter_id, twitter_token, linkedin_id, linkedin_token, ip, date, link, confirmed, newsletter, legal_validation
FROM user, user_addfields_anagraphic, ...
WHERE user.id_user = '43534534534' and
user.user_id = user_addfields_anagraphic.user_id and
...

在上面的这个例子中,我猜,user_addfields_anagraphic.user_id是表用户中名为“user_id”的主键的外键。

您还需要使用此语法连接其他表,如上所示。但是尝试从多个表中选择没有where子句的地方是不可能的。