mySQL for multi table

时间:2015-11-05 21:59:13

标签: mysql

我有3个表,每个表有3列,如:

Table 1: Col1, Col2, Col3
Table 2: Col1, Col2, Col3    
Table 3: Col1, Col2, Col3

我想比较所有Col3列,以查找所有3个表格的Col3列之间所有相同且不相同的项目。

我正在尝试(在mySQL中):

SELECT table1.Col2,table1.Col3,table2.Col2,table2.Col3, table3.Col2,table3.Col3 
FROM table1    
  INNER JOIN table1 ON table2.col3 = table1.col3    
  UNION    
FROM table1    
  INNER JOIN table1 ON table3.col3 = table1.col3    
  UNION    
FROM table2    
  INNER JOIN table2 ON table3.col3 = table2.col3

和Col3的列表不相同:

添加:

WHERE Table1.Col3 IS NULL and 
Table2.Col3 IS NULL and 
Table3.Col3 IS NULL

没有太大的成功。任何帮助将非常感谢.....

1 个答案:

答案 0 :(得分:0)

不太确定我完全理解你的问题。我知道你想要找到col3中所有三个表共有的值...如果这是你的问题,你可以通过INNER JOIN做到这一点,这是如何:

SELECT DISTINCT(t1.col3) AS IdenticalValuesInAll
FROM t1
INNER JOIN t2
ON t1.col3 = t2.col3
INNER JOIN t3
ON t1.col3 = t3.col3 OR t2.col3 = t3.col3;

在这里,我创建了一个SQL Fiddle,以便您可以看到它是如何工作的...(您会注意到列col3中所有三个表共有的数字是11和23)

如果你想从table1中选择col1,col2,col3(在我的例子中为t1),其中col3中的值对于所有三个表都是常见的,而不是简单的做这样的事情

SELECT t1.col1, t1.col2, t1.col3
FROM t1
INNER JOIN t2
ON t1.col3 = t2.col3
INNER JOIN t3
ON t1.col3 = t3.col3 OR t2.col3 = t3.col3;

这是Fiddle

现在,如果你想从col3中的某个表中选择行(col1,col2,col3),那么所有表都没有公共值,你可以这样做:

SELECT col1, col2, col3
FROM t1
WHERE col3 NOT IN (SELECT DISTINCT(t1.col3) AS commonForAllTables
                   FROM t1
                   INNER JOIN t2
                   ON t1.col3 = t2.col3
                   INNER JOIN t3
                   ON t1.col3 = t3.col3 OR t2.col3 = t3.col3);

当然这里是SQL Fiddle,看看它是怎么样的......

现在,如果你想从这个表中创建一个大表,它将包含这三个表中的所有行而不是你使用UNION ALL

SELECT col1, col2, col3
FROM t1
UNION ALL
SELECT col1, col2, col3
FROM t2
UNION ALL
SELECT col1, col2, col3
FROM t3;

以下是SQL Fiddle

中该查询的结果

你可以随心所欲地操纵那张大桌子。

下面是我们要从所有三个表(从大表中)中选择所有行的示例,其中col3在所有三个表中都不包含类似的值

SELECT col1, col2, col3
FROM (SELECT col1, col2, col3
      FROM t1
      UNION ALL
      SELECT col1, col2, col3
      FROM t2
      UNION ALL
      SELECT col1, col2, col3
      FROM t3) bigTable
WHERE col3 NOT IN (SELECT DISTINCT(t1.col3) AS commonForAllTables
                   FROM t1
                   INNER JOIN t2
                   ON t1.col3 = t2.col3
                   INNER JOIN t3
                   ON t1.col3 = t3.col3 OR t2.col3 = t3.col3);

此查询的SQL Fiddle

当然,如果你想要从col3中只有常用值而不是WHERE子句的所有三个表中选择所有值而不是NOT IN只使用IN,它将起作用。

希望这个帮助,关于INNER JOIN,UNION等你可以在网上找到很多资料所以只是google一点我不认为我应该在这里解释它是如何工作的,因为我认为我无法解释它更好那些已经写完整篇文章的人。

GL!

P.S。如果您对所有这些填写有任何疑问,可以在下面发表评论。