我有一个查询,我使用WHERE IN SELECT。这是查询:
SELECT tville_id, tville_nom, tville_etat
FROM TAB_ZONE
INNER JOIN TAB_VILLES ON tville_id = tzone_cidade
WHERE tzone_unidade1 = 1
OR tzone_unidade2 = 1
OR tzone_unidade3 = 1
OR tzone_unidade1 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
OR tzone_unidade2 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
OR tzone_unidade3 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
ORDER BY tville_etat, tville_nom
它可以工作,但正如你所看到的,我有三次在WHERE部分中使用“SELECT tunidade_id”语句。有没有办法将此SELECT的结果用作别名,所以只执行一次? (它有用吗?)
由于
答案 0 :(得分:2)
在MariaDB 10.2中,您可以common-table expressions使用this purpose。
connect()
它是否会为您带来显着的性能提升 - 我想最好的方法是尝试;但至少可以通过这种方式更好地维护查询。
答案 1 :(得分:1)
我还没有验证,但根据我的理解,这样的事情应该有效:
SELECT tville_id, tville_nom, tville_etat
FROM TAB_ZONE
INNER JOIN TAB_VILLES ON tville_id = tzone_cidade
JOIN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1 UNION SELECT 1) x on x.tunidade_id in (tzone_unidade1, tzone_unidade2, tzone_unidade3)
ORDER BY tville_etat, tville_nom
答案 2 :(得分:0)
如果没有错,可以将以下条件合并为一个
OR tzone_unidade1 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
OR tzone_unidade2 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
OR tzone_unidade3 IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
类似
OR (tzone_unidade1,tzone_unidade2,tzone_unidade3) IN (SELECT tunidade_id FROM TAB_UNIDADE WHERE tunidade_parent = 1)
答案 3 :(得分:0)
最好是不跨列传播数组。而是在另一个表中有多个行。通过这样,您可以避免重复查询,CTE,性能问题等。