2015-11-05 42 views
-1

我有3和表3列,每列如:MySQL的多桌

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

我想比較所有COL3列找到COL3列之間都是相同的,而不是相同的物品全部3個表。

我想(在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

你的代碼甚至沒有接近有效。 'UNION'用於組合多個'SELECT'查詢的結果,你不能寫'UNION FROM',它應該是'SELECT ... UNION SELECT ... UNION SELECT ...'。我真的不明白你想做什麼。你能展示一些樣本輸入數據和期望的結果嗎? – Barmar

回答

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

現在,如果你想選擇一些錶行(COL1,COL2,COL3),其中在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子句中的所有值,而不是使用IN,那麼它就可以工作。

希望這個幫助,關於內部聯接,聯盟等你可以在網上找到很多材料,所以只是谷歌一點我不認爲我應該在這裏解釋它是如何工作的,因爲我認爲我不能解釋它更好那些已經寫完整篇文章的人。

GL!

P.S.如果您有任何疑問,請填寫下面的評論。

+0

謝謝@Aleksandar Miladinovic。你的回答正是我一直在尋找的。但我有個問題。在大表查詢中:WHERE col3 NOT IN(SELECT DISTINCT(t1.col3)as commonForAllTables .......爲什麼14個col3的兩個數字在所有三個表中都不應該包含相似的值?另外,對於類似的col3所有3個表中的值(WHERE COL3 IN(SELECT DISTINCT(t1.col3)AS ....),我沒有看到兩個數字14? – Thomas

+0

@Thomas例如,如果我們在t1中有5行,在col3中有14的值所有那些行將被包含在這個查詢的結果中,因爲表t3中沒有行,col3中的值爲14,在這種情況下,我們有兩行,其中col3中的值爲14,t1中的值爲1,t2中的一個,但是在表t3中,我們不會我們排除了在t1,t2和t3中我們在col3中有相似值的行,如果我們在t3中再添加一行,col3中的值將是14,那麼所有行都會希望你明白我的意思 –

+0

我認爲查詢確實考慮到了任何兩列之間的相似性...我需要和我試圖修改大表查詢代碼,以排除14與t1.col3和t2.col3中的類似數字(以及t1.col3和t3.col3和t2.col3和t3.col3中的情況)。非常感謝。 – Thomas