我有3张桌子:
任务:
ID | UID | PID | TITLE |
1 | 2 | 0 | task 1 |
2 | 2 | 1 | task 1-1 |
3 | 3 | 0 | task 2 |
4 | 2 | 0 | task 3 |
5 | 2 | 0 | task 4 |
TODO:
ID | UID | TXID | TID | TITLE |
1 | 2 | 1 | 1 | todo1 |
2 | 2 | 1 | 1 | todo2 |
3 | 3 | 2 | 3 | todo3 |
4 | 2 | 4 | 4 | todo4 |
5 | 2 | 5 | 5 | todo5 |
timix:
ID | UID | STATUS |
1 | 2 | 0 |
2 | 2 | 1 |
3 | 3 | 0 |
4 | 2 | 1 |
5 | 2 | 0 |
我需要声明看起来像这个查询但更正了:
SELECT *
FROM todo,task,timix
WHERE task.id = todo.tid
AND todo.uid=2
AND task.pid=0
AND timix.id = todo.txid
AND timix.status = 0
这是变量的描述:
uid = user id
txid = timix id
tid = task id
pid = parent id
我需要: show tasks有todo`s和pid = 0,uid = 2,timix_status = 0
答案 0 :(得分:0)
您可能想要加入但使用EXISTS
吗?至少我是如何理解你的#34;我需要"。
SELECT *
FROM task
WHERE task.pid = 0
AND EXISTS (SELECT *
FROM todo
WHERE todo.tid = task.id
AND todo.uid = 2
AND EXISTS (SELECT *
FROM timix
WHERE timix.id = todo.txid
AND timix.status = 0));
或者您可能希望将连接保留在子查询中。
SELECT *
FROM task
WHERE task.pid = 0
AND EXISTS (SELECT *
FROM todo
INNER JOIN timix
ON timix.id = todo.txid
WHERE todo.tid = task.id
AND todo.uid = 2
AND timix.status = 0);
另一种选择可能是:
SELECT DISTINCT task.* FROM todo,task,timix WHERE task.id = todo.tid AND todo.uid=2 AND task.pid=0 AND timix.id = todo.txid AND timix.status = 0;
DISTINCT
重复推算结果。
(但请考虑使用明确的JOIN
语法而不是FROM table1, table2 WHERE table1.attribute1 = table2.attribute2
变体。它更容易看出明确的语法含义。)
这取决于您的系统(数据,索引)哪一个表现最佳。
答案 1 :(得分:0)
简单,
Select t.* from Task t join
todo td on t.ID = td.TID join
timix tx on td.TXID = tx.ID
where t.UID = 2 and tx.STATUS = 0
答案 2 :(得分:0)
由于您未提供预期结果,我不确定您到底需要什么。
这是我的方法
http://sqlfiddle.com/#!9/ec3c88/2
SELECT *
FROM task
INNER JOIN todo
ON task.id = todo.tid
AND todo.uid=2
INNER JOIN timix
ON timix.id = todo.txid
AND timix.status = 0
WHERE task.pid=0
但它返回与原始查询相同的设置。那么这个结果有什么不对?你想要排除什么记录?或者添加?