我有点情况。
我有一个问题:
SELECT DISTINCT (testrecurring.id), testrecurring.cxl, testci.cd
FROM testci, testrecurring
WHERE (testci.id = testrecurring.id)
AND testci.x_origin='1'
ORDER BY testrecurring.id DESC;
现在,如果没有设置var,我需要对此查询进行选择,这里是catch。我需要排除一些id。我现在就是这样做的。
我使用该查询创建了一个表:create table xxx SELECT * .....
现在我之前查询的结果位于另一个名为xxx
的表中。
然后:
if (!isset($var)) {
$delete = mysql_query("delete from xxx USING xxx, future_recurring where xxx.id = future_recurring.id");
}
在删除记录后,我会做最后的select * from xxx
。
这很好用,唯一的事情就是我需要通过不创建任何表来重做所有这些逻辑。也许做一些加入,我不知道该怎么做。
我希望这不会让人感到困惑。
有什么想法吗?
答案 0 :(得分:0)
现在怎么样?:
SELECT tr.id, tr.cxl, tci.cd
FROM testci AS tci
INNER JOIN testrecurring AS tr
ON tci.id = tr.id
LEFT OUTER JOIN future_recurring AS fr
ON tr.id = fr.id
WHERE tci.x_origin='1'
AND fr.id IS NULL
GROUP BY tr.id, tr.cxl, tci.cd
ORDER BY tr.id DESC
这仅包括在future_recurring
中未找到testrecurring.id的结果答案 1 :(得分:0)
您只需添加where条件即可排除您不想要的行:
SELECT *
FROM testci
JOIN testrecurring on testrecurring.id = testci.id
WHERE testci.x_origin='1'
AND testci.id NOT IN (SELECT id FROM future_recurring)
ORDER BY testrecurring.id DESC;
或者你可以试试这可能会带来更好的表现:
SELECT *
FROM testci
JOIN testrecurring on testrecurring.id = testci.id
LEFT JOIN future_recurring on future_recurring.id = testci.id
WHERE testci.x_origin='1'
AND future_recurring id IS null
ORDER BY testrecurring.id DESC;
虽然,如果你的索引是好的和理智的,而你的数据集不是很大,那么性能应该很接近。