我有以下查询:
SELECT col1, col2, col3 FROM tb1
WHERE col4=ANY(
SELECT col1 FROM tb2
WHERE col2=(SELECT col1 FROM tb3 WHERE col3='php generated string')
AND col3=(SELECT col2 FROM tb3 WHERE col3='same string as above')
);
它有效,但速度很慢。我知道有一种更好(更快)的方法可以做到这一点,但是我缺乏SQL查询经验意味着我正在努力使它变得比它需要的更难。我尝试过使用JOIN,但我也不知道如何在这种情况下使用它。
非常感谢任何帮助。
答案 0 :(得分:1)
您需要了解如何使用JOIN
。如果您要匹配多个表中一列的值,那么您应该JOIN
将这些表ON
放在一起{。}}。
SELECT tb1.col1,tb1.col2,tb1.col3
FROM tb1
JOIN tb2
ON (tb1.col4 = tb2.col1)
JOIN tb3
ON (tb1.col2 = tb3.col1
AND tb1.col3 = tb3.col2)
WHERE tb3.col3 = 'php generated string'
答案 1 :(得分:1)
SELECT tb1.col1, tb1.col2, tb1.col3
FROM tb1
INNER JOIN tb2
ON tb1.col4 = tb2.col1
INNER JOIN tb3
ON tb1.col2 = tb3.col1
AND tb3.col3 = 'php generated string'
INNER JOIN tb3
ON tb1.col3 = tb3.col2
AND tb3.col3 = 'same string as above'
答案 2 :(得分:1)
如果ANY
中的子查询可以返回多条记录,那么将您的查询重写为JOIN
将导致重复。
使用此:
SELECT col1, col2, col3
FROM tb1
WHERE EXISTS
(
SELECT NULL
FROM tb3
JOIN tb2
ON tb2.col2 = tb3.col1
AND tb2.col2 = tb3.col2
AND tb2.col1 = tb1.col4
WHERE tb3.col3 = 'php generated string'
)
并创建以下索引:
tb2 (col1, col2, col3)
tb3 (col3)