2011-11-21 64 views
0

我在这里有一些情况。如何在不创建临时表的情况下执行MySQL查询?

我有一个查询:

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; 

现在,如果变量没有设置,我需要做一个选择对这个查询,这里是渔获物。我需要排除一些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

它可能工作,但它不是要走的路。不要从你的表中创建表,你可以改用mysql视图(创建视图)。在你的情况下,你可以实现它而不创建表/视图。你可以做SELECT * FROM tbl WHERE tbl.id IN(SELECT * FROM tbl2 ...) – galchen

+0

我将如何适应该删除语句。基本上我需要排除一些ID的基础上从另一个表中的其他ID ..? – Patrioticcow

回答

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 

这仅包括在其中testrecurring.id是不是在future_recurring

+0

让我先试试吧 – Patrioticcow

+0

好吧,我在select上编辑了脚本bi。而不是*我有'DISTINCT(testrecurring.id),testrecurring.cxl,testci.cd' – Patrioticcow

+0

'future_recurring.id'在'future_recurring'表中找到,首先我做'testci.id = testrecurring.id',然后根据这些身份证的我匹配他们与'future_recurring' – Patrioticcow

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; 

还是你呢LD试试这可能会给你更好的性能:

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; 

虽然,如果你的索引是好的,理智和你的数据集不是很大,则性能应该接近。

+0

我编辑了脚本bi选择。而不是*我有'DISTINCT(testrecurring.id),testrecurring.cxl,testci.cd' – Patrioticcow

相关问题