你好亲密!
因为您说的是显示A的国家和年份,并限制了
A. Country土耳其,所以您将只看到土耳其。您需要将selects更改为
B.countryand
B.year或将where子句更改为
B.country。
这是使用交叉联接的,表中的记录越多,交叉联接的速度就会越慢。
SELECT DISTINCT b.Country, b.Year FROM table1 AS a, table1 AS b WHERe a.Year=b.Year and a.Country='Turkey';
可以写为…,并且可能具有相同的执行计划。
SELECt DISTINCT b.Country, b.Year FROM table1 AS a CROSS JOIN table1 AS b WHERe a.Year=b.Year and a.Country='Turkey';
或这使用了INNER JOIN,它限制了引擎必须完成的工作,并且不会遭受交叉联接可能导致的性能下降。
SELECt DISTINCT a.Country, a.Year FROM table1 AS a INNER JOIN table1 AS b on a.Year=b.Year and b.Country='Turkey';
为什么:
考虑一下AB发生联接时SQL引擎将做什么
+------------+------+--------+------------+------+--------+| A.Country | Rank | Year | B.Country | Rank | Year |+------------+------+--------+------------+------+--------+|France | 55 | 2000 |France | 55 | 2000 |+------------+------+--------+------------+------+--------+|Canada | 30 | 2000 |France | 55 | 2000 |+------------+------+--------+------------+------+--------+ |Turkey | 78 | 2000 |France | 55 | 2000 |+------------+------+--------+------------+------+--------+ |France | 55 | 2000 |Canada | 30 | 2000 |+------------+------+--------+------------+------+--------+|Canada | 30 | 2000 |Canada | 30 | 2000 |+------------+------+--------+------------+------+--------+ |Turkey | 78 | 2000 |Canada | 30 | 2000 |+------------+------+--------+------------+------+--------+ |France | 55 | 2000 |Turkey | 78 | 2000 |+------------+------+--------+------------+------+--------+|Canada | 30 | 2000 |Turkey | 78 | 2000 |+------------+------+--------+------------+------+--------+ |Turkey | 78 | 2000 |Turkey | 78 | 2000 |+------------+------+--------+------------+------+--------+
因此,当您说展示广告
A.Country以及土耳其
A.Year在哪里时
A.Country,您可以看到它可以返回的全部是土耳其(由于唯一的1条记录)
但是,如果您选择的
B.Country是土耳其并展示
A.Country,您将获得法国,加拿大和土耳其!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)