将同一个表的多个查询组合到一个SQL语句中

时间:2011-12-26 01:19:26

标签: mysql sql

我正在尝试将这些MySQL查询结合起来,但却没有让它们正确。这是我希望结合起来获得单行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%
}

谢谢

2 个答案:

答案 0 :(得分: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)
    )

答案 1 :(得分:3)

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

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