-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」のようなグループを試しましたが、うまくいきませんでした

列グループからすべてを返す理由、グループ 1 に一致する結果のみが必要

!!

もう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節は final にのみ適用され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'

ところで、テーブル スキーマの 1 つが変更された場合、クエリが失敗するため、おそらく選択で使用*したくないでしょう。UNION可能であれば、すべての列を明示的に選択することをお勧めします。

于 2013-08-13T20:11:07.053 に答える
0

が各テーブルにある場合grupoは、各 SELECT に WHERE 句が必要です。現在、フィルタリングされている唯一のクエリは ですSELECT * FROM outros

ここにいくつかの修正コードがあります。SELECT *BTQ:実生活で使用しないでください....

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 に答える