MySQLの複数のフィールドが同時に複数の条件セットを満たします

問題

データテーブル(ボール)をクエリします。これは、色がオレンジで、ボールの形状が丸いですか?

データシート

玉

解決策

オプション1

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'

オプション2(オプション1と同様)

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'

従来のテーブル設計では、color合計shapeをフィールドとして使用していますが、拡張する場合は、他のいくつかのフィールドを予約する必要があります。次に、クエリは、複数のフィールドの各フィールドが同時に値を満たすことです。
テーブルの設計では、ボールの属性と属性値は拡張可能です。複数の属性値を満たすアイテムは、複数回表示されます。したがって、一般的な解決策は上記の解決策1と2ですが、質問を考えてください。ボールの属性値がどんどん挿入されると、SQLの長さはどのくらいになるでしょうか。

ソリューション3(最適なソリューション)

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

おすすめ

転載: www.cnblogs.com/yiweiblog/p/12714460.html