检查另一个表的2列中是否存在4列

时间:2019-08-14 20:59:19

标签: mysql

尝试检查4的{​​{1}}列中的内容,并查看它们是否存在于Players2和{{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_namelast_name和{ {1}},first_name等于用户first_name_2last_name

视觉表示:

last_name_2

问题是试图将下一个列first_name与用户last_name进行比较,因为它只是忽略了这些列,而只关注第一列 First Name Last Name Alpha Beta Charlie Delta Eve Fred Casper Dhorn

1 个答案:

答案 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

请注意,此查询仅满足该要求的某些解释。问题中给出的规范含糊不清,即不清楚应返回什么结果集。