-2

好吧,我不知道如何正确使用 sql union。我有两个带有域(url)的表我想将表 1 与表 2 进行比较,以便我从表 2 中获得唯一域,该域不在表 1 中。

例子

表格1

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

表2

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

所以我希望我比较两个表并获取 youtube.com,因为它不在 table1 中,我使用了这样的 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 语句有什么问题

4

3 回答 3

0

你应该使用

SELECT t2.domain FROM
table2 t2 LEFT JOIN table1 t1
    ON t2.domain = t1.domain
WHERE t1.domain IS NULL
于 2012-04-11T09:34:53.487 回答
0

这是您要查找的 SQL

SELECT DISTINCT t1.domain FROM t1
WHERE domain not in (SELECT t2.domain FROM t2)
于 2012-04-11T09:35:49.193 回答
0

您需要的关系运算符是差异(联合类似于加法)。在标准 SQL 中,关键字是EXCEPT(在 Oracle 中是MINUS,这在 IMO 中更直观一点):

SELECT domain
  FROM table2
EXCEPT 
SELECT domain
  FROM table1

'php' 标签是否暗示 MySQL?MySQL 缺少显式的关系差异运算符,因此您需要使用反连接构造。

于 2012-04-11T10:47:40.890 回答