[英]Combining multiple queries of the same table into one SQL statement
我試圖結合這些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%
}
謝謝
首先讓我說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)
)
我想......我不會這樣做。 這就是存儲過程和視圖的東西,每個過程都有DO語句。 只需從最具體到最少的順序運行選擇,並返回給出行的第一個結果。
另外,我可能會在這里看到一個錯誤。 如果表中有col1 = $ var1的項目,但這些項目中沒有一個像$ var2那樣的col2,會發生什么? 應該發生什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.