Mysql多個字段同時滿足多組條件


問題

查詢出數據表(ball)中,滿足顏色是橙色,並且形狀是圓形的球有哪些?

數據表

ball

解決方案

方案一

SELECT
	name
FROM
	ball
WHERE
	NAME IN (
		SELECT
			NAME
		FROM
			ball
		WHERE
			attribute = 'color'
		AND attribute_value = 'orange'
	)
AND attribute = 'shape'
AND attribute_value = 'circle'

方案二(與方案一類似)

SELECT
	a. NAME
FROM
	ball AS a
JOIN ball AS b ON a. NAME = b. NAME
WHERE
	a.attribute = 'color'
AND a.attribute_value = 'orange'
AND b.attribute = 'shape'
AND b.attribute_value = 'circle'

常規的表設計是將colorshape作為字段,但是如果要擴展就需要預留一些其他字段。那么查詢就簡單的是多個字段中每個字段,同時滿足一個值。
該表的設計中,一個球的屬性與屬性值是可擴展的。滿足多個屬性值的物品會出現多次。所以一般的解決方案就是上面的方案一與方案二,但是考慮一個問題,如果一個球的插入的屬性值越來越多的時候,我們的sql會有多長?

方案三

SELECT
	NAME
FROM
	(
		SELECT
			NAME,
			count(NAME) AS count
		FROM
			ball
		WHERE
			(attribute, attribute_value) IN ( //這里很秀!
				('color', 'orange'),
				('shape', 'circle')
			)
		GROUP BY
			NAME
	) AS stat
WHERE
	stat.count = 2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM