MySQL连接语句

MySQL连接语句,mysql,Mysql,我需要连接两个表: 国家表 country|lang1|lang2|lang3|lang4 Canada |1 |2 |NULL |NULL US |1 |NULL |NULL |NULL 及 语言表 id|language 1 |English 2 |French 我想返回countries表中两行的值以及语言名称 我该怎么做 我试过: SELECT * FROM en_countries LEFT JOIN all_languages ON (all_lang

我需要连接两个表:

国家表

country|lang1|lang2|lang3|lang4
Canada |1    |2    |NULL |NULL
US     |1    |NULL |NULL |NULL

语言表

id|language
1 |English
2 |French
我想返回countries表中两行的值以及语言名称

我该怎么做

我试过:

SELECT * FROM en_countries LEFT JOIN all_languages 
ON (all_languages.id = en_countries.lang1 AND all_languages.id = en_countries.lang2)
但这并没有给我语言名称。我该怎么做


如果有人能给我这个活动记录格式,那将是一个奖励。我这样做是为了CodeIgniter。

我不确定你的问题是否正确,但听起来你应该使用
内部连接
,而不是
左连接



我不确定你的问题是否正确,但听起来你应该使用
内部连接
,而不是
左连接



我认为这里的问题在于
(all_languages.id=en_countries.lang1和all_languages.id=en_countries.lang2)

宁可尝试

SELECT * FROM en_countries LEFT JOIN all_languages 
ON (all_languages.id = en_countries.lang1 OR all_languages.id = en_countries.lang2)

“and”意味着一种语言应该是一个国家的第一语言和第二语言,用“or”代替它可能会起到作用我认为这里的问题在于
(all_languages.id=en_countries.lang1和all_languages.id=en_countries.lang2)

宁可尝试

SELECT * FROM en_countries LEFT JOIN all_languages 
ON (all_languages.id = en_countries.lang1 OR all_languages.id = en_countries.lang2)

“and”意味着一种语言应该是一个国家的第一语言和第二语言,用“or”代替它可能会起作用,你需要从所有语言中选择两次

SELECT en_countries.country, t1.language as lang1, t2.language as lang2    FROM en_countries    
JOIN all_languages AS t1 ON t1.id = en_countries.lang1 
JOIN all_languages AS t2 ON t2.id = en_countries.lang2

那么我相信您在php中访问$row->lang1时需要从所有语言中选择两次

SELECT en_countries.country, t1.language as lang1, t2.language as lang2    FROM en_countries    
JOIN all_languages AS t1 ON t1.id = en_countries.lang1 
JOIN all_languages AS t2 ON t2.id = en_countries.lang2

那么我相信您可以在php中以$row->lang1

的形式访问,首先,您使用
,这意味着只有具有相同lang1等于lang2的记录才会加入。我相信你需要这样的东西:

SELECT c.*, l1.language as lang1_name, l2.language as lang2_name  
FROM en_countries c
LEFT JOIN all_languages l1 ON (l1.id = c1.lang1)
LEFT JOIN all_languages l2 ON (l2.id = c1.lang2)

首先,使用
,这意味着只有具有相同lang1等于lang2的记录才会合并。我相信你需要这样的东西:

SELECT c.*, l1.language as lang1_name, l2.language as lang2_name  
FROM en_countries c
LEFT JOIN all_languages l1 ON (l1.id = c1.lang1)
LEFT JOIN all_languages l2 ON (l2.id = c1.lang2)

内部联接不会从DBWell返回任何行,您需要两个联接。请稍等,我会更新我的答案。:-)内部联接不会从DBWell返回任何行,您需要两个联接。请稍等,我会更新我的答案。:-)完美的非常感谢。这很好,但我更喜欢下面的解决方案。完美。非常感谢。这很好,但我更喜欢下面的解决方案。这也可以,但返回一行,这更理想。如何在PHP中访问t1和t2。在foreach循环中,它是$row->t1吗?我不使用PHP,但我认为需要为列指定一个唯一的名称。请参见EditThis,它也可以工作,但返回一行,这更理想。如何在PHP中访问t1和t2。在foreach循环中,它是$row->t1吗?我不使用PHP,但我认为需要为列指定一个唯一的名称。参见编辑