2012-04-11 101 views
-2

以及我不知道如何正確使用sql聯合。 我有域名(網址)兩個表我想與表2比較表1,使我從表2的唯一域這是不是在表1如何使用SQL UNION

例如

表1

id domain 
1 google.com 
2 facebook 
3 stackoverflow.com 

表2

id domain 
1 youtube.com 
2 facebook 
3 stackoverflow.com 

,所以我想我比較這兩個表,並得到youtube.com,因爲它不是在表1 我使用SQL UNION像

$query="SELECT table1.domain, table2.domain "."FROM table1, table2 "."WHERE table1.domain != table2.domain"; 
$result = mysql_query($query) or die(mysql_error()); 
while ($rec = mysql_fetch_array($result)) 
{ 
$new_url=$rec["domain"]; 
} 

現在我得到雙倍的結果就像youtube.com youtube.com 這樣有利於什麼錯我的SQL聲明

+0

您需要使用JOIN,而不是UNION – dtech 2012-04-11 09:33:47

+1

「NOT IN」如何? – keyser 2012-04-11 09:34:13

+0

你爲什麼要用這個。字符串中的分隔符? – Dion 2012-04-11 09:37:16

回答

0

您應該使用

SELECT t2.domain FROM 
table2 t2 LEFT JOIN table1 t1 
    ON t2.domain = t1.domain 
WHERE t1.domain IS NULL 
0

這就是你要找的

SELECT DISTINCT t1.domain FROM t1 
WHERE domain not in (SELECT t2.domain FROM t2) 
的SQL
+0

查看Marco的答案,它對大多數DBMS的要快得多 – dtech 2012-04-11 09:39:41

+0

@dtech是的,我知道。我只提供一種不同的解決方案...閱讀它像「邏輯訓練」:) – DonCallisto 2012-04-11 09:40:27

+0

哇謝謝........ :) – user114500 2012-04-11 09:40:28

0

您需要的關係運算符不同(聯合類似於加法)。在標準SQL關鍵字是EXCEPT(在Oracle它是MINUS,這是一個更直觀一點IMO):

SELECT domain 
    FROM table2 
EXCEPT 
SELECT domain 
    FROM table1 

是否 'PHP' 標籤意味着MySQL的? MySQL缺少顯式的關係差異運算符,因此您需要使用antijoin構造。