将同一个表的多个查询合并到一个SQL语句中
我正在试图结合这些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%
}
感谢
首先我要说的是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)
)
This Works!谢谢! – user1115729
没问题。随时接受答案,如果它帮助你。 – TetonSig
我想......我不会做。这只是存储过程和视图的事情,每个存储过程和视图都有if语句。只需从最具体到最少的顺序运行选择,并返回给出行的第一个结果。
此外,我可能会在这里看到一个错误。如果表中的项目col1 = $ var1,但是这些项目都没有col2(如$ var2),会发生什么?应该发生什么?
优秀点。我已经更新了我的回答以反映。 – TetonSig
到目前为止你有尝试过什么吗? – hakre
我试过了'SELECT IF('$ var1'IN(SELECT DISTINCT col1 FROM t1),(colA,colB,colC),)从t1',但我迷失在if语句的流程中 – user1115729