尝试检查4
的{{1}}列中的内容,并查看它们是否存在于Players
,2
和{{1}的Users
列中} 分别。
玩家:
First Name
用户:
Last Name
尝试了很多查询,这是我最接近的一个...。
First_Name Last_Name First_Name_2 Last_Name_2
Alpha Beta Charlie Delta
Eve Fred NULL NULL
Casper Dhorn Alpha Beta
但是返回:
First Name Last Name
Alpha Beta
Charlie Delta
Eve Fred
Casper Dhorn
我的目标是产生一个包含两列SELECT *
FROM Players
WHERE EXISTS (SELECT 1
FROM Users
WHERE Players.First_name = Users.First_Name
OR Players.First_Name_2 = Users.Last_Name )
和
First Name Last Name
Alpha Beta
Eve Fred
Casper Dhorn
的查询,并包含来自玩家first_name
,last_name
和{ {1}},first_name
等于用户first_name_2
和last_name
视觉表示:
last_name_2
问题是试图将下一个列first_name
与用户last_name
进行比较,因为它只是忽略了这些列,而只关注第一列
First Name Last Name
Alpha Beta
Charlie Delta
Eve Fred
Casper Dhorn
答案 0 :(得分:0)
“尝试检查”并没有告诉我们查询应返回什么结果集。
我们将把规范解释为从(不幸的名称为)表Table_1
返回行,以及指示是否在(具有相似命运的表中找到匹配行的列)名称)Table_2
。
类似这样的东西:
SELECT t.column_1
, t.column_2
, t.column_3
, t.column_4
, ( SELECT EXISTS ( SELECT 1 FROM Table_2 t2
WHERE t2.column_1 = t.column_1
AND t2.column_2 = t.column_2
) c12
) AS match_1_2
, ( SELECT EXISTS ( SELECT 1 FROM Table_2 t2
WHERE t2.column_1 = t.column_3
AND t2.column_2 = t.column_4
) c34
) AS match_3_4
, ( SELECT EXISTS ( SELECT 1 FROM Table_2 t2
WHERE t2.column_1 = t.column_3
) c3
) AS match_3
, ( SELECT EXISTS ( SELECT 1 FROM Table_2 t2
WHERE t2.column_2 = t.column_4
) c4
) AS match_4
FROM `Table_1` t
如果在match_1_2
中找到至少一个匹配行,结果集中的Table_2
列将包含值1。如果找不到匹配的行,则该列将包含0(零)。同样,如果找到匹配项,match_3_4
将包含1,否则为0。
我们可以执行所有形式的检查,检查仅一列是否匹配,如match_3和match_4表达式所示。
如果要限制返回的行,可以添加HAVING子句。如果我们希望在column_3和column_4(找不到匹配项)上不匹配的行,则
HAVING NOT match_3_4
如果我们只想返回在1&2和3&4上都匹配的行,
HAVING match_1_2
AND match_3_4
请注意,此查询仅满足该要求的某些解释。问题中给出的规范含糊不清,即不清楚应返回什么结果集。