Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql使用foregin键选择两个表_Mysql_Sql_Join_Foreign Keys - Fatal编程技术网

Mysql sql使用foregin键选择两个表

Mysql sql使用foregin键选择两个表,mysql,sql,join,foreign-keys,Mysql,Sql,Join,Foreign Keys,我想把两张桌子合二为一。 第一个是: ID code_1 code_2 ============================== 1 XXX YYY 2 ZZZ YYY 3 YYY ZZZ 第二个是: CODE Name ============== XXX Name_1 YYY Name_2 ZZZ Name_3 有一个FK代码_1=代码和代码_2=代码 我想创建一个只

我想把两张桌子合二为一。 第一个是:

ID    code_1      code_2
==============================
1      XXX        YYY
2      ZZZ        YYY
3      YYY        ZZZ
第二个是:

CODE    Name
==============
XXX     Name_1
YYY     Name_2
ZZZ     Name_3
有一个FK代码_1=代码和代码_2=代码 我想创建一个只有名称_1和名称_2的表(按代码_1或按代码_2) 但不仅仅是一个smiple查询,其中的名称是XXX或YYY,而是来自FK的名称。像这样:

ID   code_1    code_2
=======================
1    Name_1    Name_2
3    Name_2    Name_1
我试过这样做,但我不知道如何用一个名称替换XXX\u 1:

SELECT Table1.ID, Table1.code_1, Table1.code2 FROM MyDB.Table1
WHERE (code_1=XXX and code_2 =YYY) or (code_2=XXX and code_1 =YYY)

非常感谢

要获得包含两个表的结果,您可以使用:

SELECT id FROM table1
INNER JOIN table2 ON CODE = code_1
UNION ALL
SELECT table2.name Name1
FROM table2
INNER JOIN table1 ON CODE = code_1
UNION ALL
SELECT table2.name Name2
FROM table2
INNER JOIN table1 ON CODE = code_2;
以上内容未经测试。如果有帮助,请告诉我

有关MySQL的更多信息,请查看:

已更新


是的,但只有一种情况XXX和YYY而不是YYY和XXXOne需要知道表的含义才能进行查询。人们不需要知道约束条件。可以使用这些约束,例如将一行一列的表转换为一个值,或者省略DISTINCT或ALL。但是人们永远不需要约束。@Kate“我有语法错误”我们该怎么办?给出错误消息。谷歌搜索错误信息。阅读关于UNION.@P.Soutzikevich PS别忘了sqlfiddle.com。这是你想要的。尝试将Name_1和Name_2合并到一列中,或者更改您的概念模式,为什么答案中只有两行?你不仅仅是用名字替换代码。你在做什么?请详细说明答案中何时有一行。(你必须告诉我们你总结了什么/标记为“合并”。)理想情况下,完成这个句子模板:当(f.id,f.code_1,f.code_2)在第一个和(s1.code,s1.name)和(s2.code,s2.name)时,答案中有行(id,code_1,code_2)位于第二个位置,id=f.id和and code_1=s1.name和code_2=s2.name和s1.name=f.code_1和s2.name=f.code_2和…”PS Read re SQL JOIN。两个表的联接(给定别名a和b)是a中的一行和b中的一行的串联行(一个句子模板,并导致SQL查询联接、ON、WHERE或and)PS请阅读并采取行动。不要给出一个,即与回答问题相关的信息,会使你的问题脱离主题。你的编辑不清楚。“简单查询”是另一个标签,而不是明确的描述。“不仅仅是简单查询”是另一个标签。使用足够的单词和句子清楚地解释。(一个就足够了:我之前要求的句子模板aka predicate。)(您的解释必须只说明示例输出中的ID 1和ID 3。)可能您想说的是,您想要的是唯一的行,看起来像第一行,在{YYY,XXX}中都有代码_1和代码_2,但每个代码都被其名称替换?PS如果是表(key,…,x_1,x_2)通常可以替换为(key,…,n,x)或(key,…,x)。否则查询和更新会变得不必要的复杂。例如,您真正需要的第一个表可能是(id,n,code),而您真正需要的结果是(id,name)。