2017-07-16 53 views
1

我正在嘗試使用mysql查詢來檢查兩列值之間的多個值。 例如,對於一個值這裏是我的查詢其作品檢查兩列之間的多個值mysql

SELECT column3 
FROM table 
WHERE (12 between minvaluecol AND maxvaluecol) AND 
     id = 123; 

我想檢查等(12,13,14,67,68)多個值,應該返回在minvaluecol之間的值maxvaluecol列。在這種情況下,只有12,13,14在minvaluecol和maxvaluecol列之間,其中67,68不是。

我的表看起來像這樣,

id | minvaluecol | maxvaluecol 
---- | ----------- | ------------ 
121 | 23   | 35 
123 | 10   | 20 
125 | 40   | 50 

輸出ID 123應該是什麼樣子,

12 | true 
13 | true 
14 | true 
67 | false 
68 | false 

請幫我這個查詢在MySQL。謝謝。

+0

你爲什麼混合整數和字符串。提供樣本數據和期望的結果。 –

+0

@GordonLinoff,我用示例表和期望的結果集更新了我的問題。只考慮數字。 – Ramya

回答

1

更新

全面更新的基礎上更新的問題的答案。

正如你所需要的所有值不同的行,你需要SELECT所有的人都用UNION,並與原表LEFT JOIN它,例如:

SELECT a.val, IF(a.val BETWEEN tv.minvaluecol AND maxvaluecol, 'true', 'false') AS result 
FROM (
SELECT 12 AS val 
UNION 
SELECT 13 AS val 
UNION 
SELECT 14 AS val 
UNION 
SELECT 67 AS val 
UNION 
SELECT 68 AS val) a 
JOIN test_values tv 
WHERE tv.id = 123; 

這裏的SQL Fiddle

+1

當然,您可以使用'between'比較字符串。當你混合整數和字符串時,它顯然是錯誤的:-) – dnoeth

+0

可能有一些值不在字符串或其他數字之間的這些列之間。即使一個值位於兩列之間,上面的查詢也會返回true。我想知道列之間的所有值是什麼。 – Ramya

+0

@Ramya:然後切換到'AND'而不是'OR'。 – dnoeth

1

,讓您的結果,最簡單的方法是插入這些值到一個表,然後加入這樣的:

SELECT value, 
    CASE WHEN value between minvaluecol AND maxvaluecol THEN 'true ELSE 'false' END 
FROM table 
CROSS JOIN table_with_values 
WHERE id = 123 
ORDER BY value 
+1

感謝您的建議。這些值是動態的並且經常變化。所以需要看看我們是否可以在不創建table_with_values的情況下實現這一點。 – Ramya