我有两张表,比如
表1:
word id
a 1
a 2
a 10
c 20
d 21
e 30
表2:
id1 id2
1 20
2 21
现在,如果word = 'a'
,那么我需要使用table1和table2找出'c'
和'd'
:
我写了一个查询,它工作但是花了太多时间,因为表包含大量数据。
查询:
SELECT word
FROM table1
WHERE id IN
(SELECT id2 FROM table2
WHERE id1 IN
( SELECT id FROM table1 WHERE word = 'a'))
另一个问题:
SELECT DISTINCT word FROM table1 WHERE id IN (SELECT id FROM table1 WHERE word = 'a')
答案 0 :(得分:2)
SELECT T1.WORD
FROM TABLE1 T1
INNER JOIN TABLE2 T2 ON T1.ID = T2.ID2
INNER JOIN TABLE1 T3 ON T2.ID1 = T3.ID
WHERE T3.WORD = 'a'
您应该尽量避免使用嵌套的SELECT
并尽可能多地使用JOIN
。这是因为存在一个在查询中执行语句的顺序。
JOIN
始终在WHERE
语句之前执行,并且通过这样做,您可以提前过滤一步。
如果JOIN
无法解决您的所有问题,那么您可以在WHERE
条款中加入条件。
答案 1 :(得分:1)
尝试这样的事情,但是。检查您的身份证上是否有索引
select word
from table1 where id in (
select table2.id2
from Table1 inner join Table2 on id1 = Table1.id and Table1.word = 'a')
答案 2 :(得分:1)
试试这个
SELECT word
FROM table1 WHERE id IN(
SELECT table2.id2
FROM Table1 INNER JOIN Table2 ON id1 = Table1.id AND Table1.word = 'a'
)
答案 3 :(得分:1)
这也是...
SELECT t.word
FROM table1 t
INNER JOIN Table2 ON t.id = id2
INNER JOIN table1 tt ON id1 = tt.id
WHERE tt.word = 'a'