MySQL连接语句

时间:2011-06-09 20:37:56

标签: mysql

我需要加入两个表:

国家/地区表

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

语言表

id|language
1 |English
2 |French

我想使用语言名称返回我的国家/地区表中两行的值。

我该怎么做?

我试过了:

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

但这并没有给我语言名称。我该怎么做?

如果有人能以Active Record格式给我这个,那将是一个奖励。我正在为CodeIgniter做这个。

4 个答案:

答案 0 :(得分:1)

我不确定我的问题是否正确,但听起来你应该使用的是inner join而不是left joinSee this


select country.*
from en_countries as country
join all_languages as lang1
on lang1.id = country.lang1
join all_languages as lang2
on lang2.id = country.lang2
-- optionally:
where lang1.id = ?
and lang2.id = ?

答案 1 :(得分:1)

我认为这里的问题是(all_languages.id = en_countries.lang1 AND 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)

'和'意味着一种语言应该是一个国家的第一语言和第二语言,用'或'替换它可能会成功

答案 2 :(得分:1)

首先,您使用AND表示只有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)

答案 3 :(得分:0)

您需要从all_languages中选择两次

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