1

私は2つのテーブルを持っています:

タスク
ID名dueDate完了プロジェクトID

プロジェクト
ID名dueDateが完了しました

同じデータの行について両方のテーブルにクエリを実行する必要があります。complete = 0の行を探すだけでサンプルステートメントを実行しようとしましたが、結果が得られませんでした。ANDの代わりにORを使用することと関係があると思いますが、今は私のレベルを少し上回っています...何かアイデアはありますか?

明確にするために、私は重複する行を探していません。「完了したすべてのタスクとプロジェクト=0」を探しています。

クエリは次のとおりです。

SELECT * FROM "task" t, "project" p WHERE t.dueDate = "2012-08-17" OR p.dueDate = "2012-08-17" AND t.completed = 0 OR p.completed = 0

回答のコードの1つを機能させることができましたが、アプリ全体が1つのテーブルと通信するように記述されており、タスクとプロジェクトテーブルを組み合わせて、isProject列を使用して区別する方がはるかに簡単であることに気付きました。タスクからのプロジェクト。これにより、プロジェクトにも列が追加されるため、プロジェクトをプロジェクト内にネストする機能も追加projectIDされます。

結局、KISSが勝つ...

すべての助けをありがとう!使用しなくても、うまくいった答えに印を付けます。

4

3 に答える 3

1

括弧を使用してみてください。

SELECT * FROM "task" t, "project" p WHERE (t.dueDate = "2012-08-17" OR p.dueDate = "2012-08-17") AND (t.completed = 0 OR p.completed = 0)
于 2012-08-17T20:14:15.223 に答える
1

両方のテーブルの値のみを一致させ、dueDate='2012-08-17'からcompleted=0にする場合:

結合を使用して、テーブルの結果を1つにバインドできます。内部結合は、両側で一致する結果のみを返します。したがって、これを使用して両方のテーブルでそれらを照合し、クラシックで必要な値をフィルタリングできます。

select * from task t inner join project p on t.dueDate = p.dueDate and t.completed = p.completed
where t.dueDate = '2012-08-17' and t.completed = 0
于 2012-08-17T20:19:03.630 に答える
0

代わりにこれを試してください:

SELECT dueDate, completed
FROM task AS t 
WHERE (dueDate = "2012-08-17" AND completed = 0)
UNION ALL
SELECT dueDate, completed
FROM project AS p
WHERE (dueDate = "2012-08-17" AND completed = 0)

dueDate = "2012-08-17"これにより、各テーブルのすべてのレコードが取得されますcompleted = 0

于 2012-08-17T20:17:17.763 に答える