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,但我认为需要为列指定一个唯一的名称。参见编辑