2015-10-02 22 views
0

的結果我有三個SQL查詢:的MySQL運行兩個SQL查詢的一個依賴於第三查詢

1) SELECT * FROM table_name_1 WHERE user = 'user1' AND sub_name = '' AND name != 'some_name'; 
2) SELECT * FROM table_name_1 WHERE user = 'user1' AND sub_name = ''; 
3) SELECT DISTINCT role FROM table_name_1 where user = 'user1'; 

在這裏,我可以結合這3個查詢能夠運行任何查詢1查詢2取決於對查詢結果3?

我可以先運行查詢3,並將該輸出放入一個變量中,並根據該變量中的值運行查詢1或2中的值。 但我想看看是否所有這些都可以純粹在sql中完成。

我嘗試了用IF,但得到如下的錯誤,我想這是因爲我不選擇後首先選擇任何列。但我真的不需要什麼選擇有:

mysql> SELECT IF(((select distinct role from table_name_1 where user = 'user1') = 'admin'),(SELECT name, display, good_high, critical_low, warning_low, warning_high FROM table_name_1 WHERE user = 'user1' AND sub_name = ''),(SELECT name, display, good_high, critical_low, warning_low, warning_high FROM table_name_1 WHERE user = 'user1' AND sub_name = '' AND name != 'some_name')); 
ERROR 1241 (21000): Operand should contain 1 column(s) 


mysql> SELECT IF(((select role from table_name_1 where user = 'user1' limit 1) = 'admin'),(SELECT name, display, good_high, critical_low, warning_low, warning_high FROM table_name_1 WHERE user = 'user1' AND sub_name = ''),(SELECT name, display, good_high, critical_low, warning_low, warning_high FROM table_name_1 WHERE user = 'user1' AND sub_name = '' AND name != 'some_name')); 
ERROR 1241 (21000): Operand should contain 1 column(s) 
mysql> 

回答

3

你可以用EXISTS這些查詢組合:

SELECT * 
FROM table_name_1 
WHERE 
    user = 'user1' 
    AND sub_name = '' 
    AND (
    (name != 'some_name') 
    OR EXISTS (SELECT role FROM table_name_1 
       WHERE user = 'user1' AND role='admin') 
) 
+0

您是太快了! +1先生 – zedfoxus