2013-04-30 128 views
1

在SQL Server中,我可以做這樣的事情:IF(SUBQUERY)= SOMETHING選擇一個ELSE的選擇B的MySql

IF (SELECT COUNT(*) FROM TABLE WHERE COLUMN=VALUE) = 0 
SELECT 1,2,3 
ELSE SELECT A,B,C FROM TABLE WHERE COLUMN=VALUE 

我用了很多,但現在我必須使用MySQL,我可以「噸真的得到那個工作:)

我想同樣適用於UPSERT:

IF (SELECT COUNT(*) FROM TABLE WHERE COLUMN=VALUE) = 0 
INSERT INTO TABLE(COLUMN, OTHERCOLUMN) VALUES(VALUE, OTHERVALUE) 
ELSE 
UPDATE TABLE SET OTHERCOLUMN=OTHERVALUE WHERE COLUMN=VALUE 

何做你該做「,如果子查詢別人的MySql中?

回答

2

你可以使用這樣的事情:

SELECT * 
FROM 
    (SELECT 1,2,3) s 
WHERE 
    (SELECT COUNT(*) FROM TABLE WHERE COLUMN=VALUE) = 0 
UNION ALL 
SELECT 
    A,B,C 
FROM 
    TABLE 
WHERE 
    COLUMN=VALUE 
+0

這對我來說工作得很好。但是我必須說,Sql Server if-else有點「靈活」。如果A,B,C是COUNT,AVG,MAX等函數,你會得到兩個結果,但我當然可以修復極限1 – Jesper 2013-04-30 22:53:32

+0

@Jesper,我認爲在這種情況下sql服務器更靈活,這是隻是一個「骯髒」的技巧,使其在MySQL中工作。您可以使用限制1來解決這個問題,或者您可以再次使用子查詢,例如'SELECT * FROM(SELECT A,B,C ... WHERE ...)WHERE(SELECT COUNT(*)...)> 0'但是id看起來不像在SQL服務器... – fthiella 2013-04-30 22:59:26

1

假設列A,B和C沒有NULL值,你可以用這個也:

SELECT 
    COALESCE(t.a, 1) AS a, 
    COALESCE(t.b, 2) AS b, 
    COALESCE(t.c, 3) AS c 
FROM 
    (SELECT 1 AS dummy FROM dual) AS d 
    LEFT JOIN 
    TableX AS t 
     ON t.columnX = Value ; 
0

篩選。 ..

select * from (
    select a, b, c 
    from table t1 
    where column = someValue 
    union 
    select 1, 2, 3) t2 limit 1 
+0

相當不錯,但你錯過了一個paranthese在'選擇(1' – Jesper 2013-04-30 23:01:15

+0

@Jesper不完全。paren從第一行缺少,並且不需要一個先選擇。固定。謝謝。 – xagyg 2013-04-30 23:04:02