OUTPUT;)
SQL Fiddle
のMySQL 5.6スキーマ:
CREATE TABLE SO_TEST (
id int,
column1 char(2),
column2 char(2)
);
INSERT SO_TEST VALUES
(1,'A','A'),
(1,'B','B'),
(1,'C','A'),
(2,'B','A'),
(2,'B','C'),
(2,'C','C'),
(3,'D','C'),
(3,'B','D'),
(3,'E','D');
クエリ1:
SELECT COUNT(1) AS RESULT
FROM (
SELECT id, GROUP_CONCAT(CONCAT(CONCAT(column1,','),column2)) STR FROM SO_TEST GROUP BY id
) TMP
WHERE FIND_IN_SET('A',TMP.STR) = 0
さて、それを説明しましょう。サブクエリで
、私はグループIDとconcat
それらによってすべてcolumn1
、column2
値を取得してきた、そしてそれは、私たちはその結果に従うと、あなたはsqlfiddleでそれを試すことができます返されます。
+----+-------------+
| id | STR |
+----+-------------+
| 1 | A,A,B,B,C,A |
| 2 | B,A,B,C,C,C |
| 3 | D,C,B,D,E,D |
+----+-------------+
だから、メインクエリでは、私はWHERE
句でFIND_IN_SET(param1, param2)
を使用し、この機能は私たちにPARAM2(PARAM2年代すべての要素は、カンマで区切る必要があります)でのparam1のインデックスを返し、場合しますparam1はparam2にはありませんので、WHERE
については明らかです。
最後にcount(1)
は、私たちが望むものを手に入れるのに役立ちます。
Results
:
| RESULT |
|--------|
| 1 |
あなたの質問は不明です。 col1またはcol2に 'A'が含まれていない行は1ではありません。もっと詳しく説明できますか? –