簡體   English   中英

只選擇與某些其他特定表中的行相關聯的行

[英]Selecting only rows which are associatied to a row in some other particular table

table1:
columns: id, name

table2:
columns: id, name

assoc_table1_table2:
columns: id_table1, id_table2

我需要從table1中選擇所有行,其中table2中至少有一行與該行相關聯。

什么是有效的方法? 或者,以某種方式更正確?

我在想:

SELECT DISTINCT t.id, t.name
FROM table1 t
JOIN assoc_table1_table2 a ON t.id=a.id_table1;

要么:

SELECT id, name
FROM table1 t WHERE EXISTS (
    SELECT *
    FROM assoc_table1_table2 a
    WHERE t.id=a.id_table1
);

關於上述內容的任何想法通常更快?

(明顯的索引已經到位)

都不行

我建議使用“ WHERE EXISTS”,因為它將為優化器提供更大的自由度。

使用“ WHERE COUNT(*)”或DISTINCT將強制執行全表掃描。

您只想知道,例如,十億行表中是否至少存在1行。 一旦數據庫找到第一行,就可以滿足“ WHERE EXISTS”。 在具有合理優化器的數據庫上,您應該發現它運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM