-1

我正在使用这个查询

query = "SELECT * FROM ri UNION SELECT * FROM pj UNION SELECT * FROM td UNION SELECT * FROM cert UNION SELECT * FROM outros WHERE grupo = 'Grupo 1'";

我试过像'Grupo 1'这样的grupo,但也没有用

为什么它从列 grupo 返回所有内容,我只想要与 grupo 1 匹配的结果

!!

还有另一个附加问题,如何制作file.db + date的副本...我打算每天备份一个文件,并在另一个文件夹中复制当天的日期

4

2 回答 2

1

运算符的WHERE优先级高于UNION。您的查询实际上是:

SELECT * FROM ri 
UNION 
SELECT * FROM pj 
UNION 
SELECT * FROM td 
UNION 
SELECT * FROM cert 
UNION 
SELECT * FROM outros WHERE grupo = 'Grupo 1'

WHERE条款仅适用于决赛SELECT * FROM outros。您要么需要将其添加WHERE到每个具有grupo列的子查询中(您没有指定哪个,所以我假设全部):

SELECT * FROM ri WHERE grupo = 'Grupo 1'
UNION 
SELECT * FROM pj WHERE grupo = 'Grupo 1'
UNION 
SELECT * FROM td WHERE grupo = 'Grupo 1'
UNION 
SELECT * FROM cert WHERE grupo = 'Grupo 1'
UNION 
SELECT * FROM outros WHERE grupo = 'Grupo 1'

或者您可以使用这样的子查询(未经测试,语法可能已关闭,抱歉):

SELECT * FROM 
(
    SELECT * FROM ri 
    UNION 
    SELECT * FROM pj 
    UNION 
    SELECT * FROM td 
    UNION 
    SELECT * FROM cert 
    UNION 
    SELECT * FROM outros 
)
WHERE grupo = 'Grupo 1'

顺便说一句,您可能不想*UNION选择中使用,因为如果其中一个表架构发生更改,查询将失败。如果可能,最好显式选择所有列。

于 2013-08-13T20:11:07.053 回答
0

如果grupo每个表中都有,那么每个 SELECT 都需要一个 WHERE 子句。现在唯一被过滤的查询是SELECT * FROM outros.

这是一些修改代码。BTQ:请不要SELECT *在现实生活中使用......

SELECT * 
FROM ri 
WHERE grupo = 'Grupo 1'
UNION 
SELECT * 
FROM pj 
WHERE grupo = 'Grupo 1'
UNION 
SELECT * 
FROM td 
WHERE grupo = 'Grupo 1'
UNION 
SELECT * 
FROM cert 
WHERE grupo = 'Grupo 1'
UNION 
SELECT * 
FROM outros 
WHERE grupo = 'Grupo 1'
于 2013-08-13T20:10:54.497 回答