2011-12-26 81 views
6

我正在试图结合这些MySQL查询,但没有弄清楚它们的正确性。这里是我希望结合得到单行sql语句的伪代码。将同一个表的多个查询合并到一个SQL语句中

$var1 = "abc" 
$var2 = "def" 

IF ($var1 IN (SELECT DISTINCT col1 FROM t1)) 
{ 
    SELECT colA, colB, colC FROM t1 WHERE col1 = $var1 AND col2 LIKE '%$var2%' 
} 
ELSE 
{ 
    SELECT colA, colB, ColC FROM t1 WHERE col2 LIKE %$var1% 
} 

感谢

+1

到目前为止你有尝试过什么吗? – hakre

+0

我试过了'SELECT IF('$ var1'IN(SELECT DISTINCT col1 FROM t1),(colA,colB,colC),)从t1',但我迷失在if语句的流程中 – user1115729

回答

5

首先我要说的是mjfgates可能是正确的。原来的伪代码不是“坏”,只是因为它需要两步。您的SQL语句越复杂,查询引擎可能找不到最佳计划的机会就越大。在这种特殊情况下,这种情况不太可能,因为我们只需要多次引用一个表,但在这些情况下总要记住一些事情。将SQL降到一个语句本身并不总是一个有价值的目标。

现在回答你的问题:

select colA,colB,colc from table1 t1 
    where 
    (
    (col1 = $var1 and col2 like '%$var2%') and 
      EXISTS (select 1 from table1 t2 where t2.col1 = $var1) 
    ) 
    or 
    (
    (col2 LIKE %$var1%) and 
      NOT EXISTS (select 1 from table1 t3 where t3.col1 = $var1) 
    ) 
+0

This Works!谢谢! – user1115729

+0

没问题。随时接受答案,如果它帮助你。 – TetonSig

3

我想......我不会做。这只是存储过程和视图的事情,每个存储过程和视图都有if语句。只需从最具体到最少的顺序运行选择,并返回给出行的第一个结果。

此外,我可能会在这里看到一个错误。如果表中的项目col1 = $ var1,但是这些项目都没有col2(如$ var2),会发生什么?应该发生什么?

+0

优秀点。我已经更新了我的回答以反映。 – TetonSig

相关问题