您的查询将从aaa
只选择项其中bbb
不包含相同的pidm
(除column3
不是'X','Y'或'Z'之一的行之外的任何行)。如果您需要查看哪些条目丢失,我会看到两种一般方法。让我们来看看他们这个数据集:
CREATE TABLE `aaa` (`pidm` BIGINT PRIMARY KEY AUTO_INCREMENT, `column1` VARCHAR(10), `column2` VARCHAR(10));
INSERT INTO `aaa` (`pidm`, `column1`, `column2`)
VALUES (1, '1a', '1b'), (2, '2a', '2b'), (3, '3a', '3b'), (4, '4a', '4b'), (5, '5a', '5b'), (6, '6a', '6b'),
(7, '7a', '7b'), (8, '8a', '8b');
CREATE TABLE `bbb` (`pidm` BIGINT, `column3` VARCHAR(10));
INSERT INTO `bbb` (`pidm`, `column3`)
VALUES (1, 'X'), (1, 'Y'), (1, 'Z'), (2, 'Y'), (2, 'Z'), (3, 'X'), (3, 'Z'), (4, 'Z'), (5, 'X'), (5, 'Y'), (6, 'Y'),
(7, 'X');
加入一个“表”只含有“X”,“Y”和“Z”第一
SELECT
table1.pidm,
table1.column1,
table1.column2,
temp1.column3
FROM
aaa AS table1
JOIN (SELECT
'X' AS column3
UNION SELECT
'Y'
UNION SELECT
'Z') temp1
LEFT JOIN
bbb AS table2 ON table2.pidm = table1.pidm AND table2.column3 = temp1.column3
WHERE table2.pidm IS NULL;
这将导致12行其中结果中的column3
的每个值将表示pidm
,其中bbb
中的行不能被找到。当然你也可以使用它作为一个子查询,并创建一个类似的结果接近2
计数值直接
SELECT
table1.pidm,
table1.column1,
table1.column2,
COALESCE(SUM(table2.column3 = 'X'), 0) AS X,
COALESCE(SUM(table2.column3 = 'Y'), 0) AS Y,
COALESCE(SUM(table2.column3 = 'Z'), 0) AS Z
FROM
aaa AS table1
LEFT JOIN bbb AS table2
ON table2.pidm = table1.pidm
GROUP BY table1.pidm;
这将导致8排,每column3
值的每个pidm
计数附加到aaa
的数据。
所以你需要判断'table2'中是否没有与'pidm'相同的条目或'column3'中存储了什么? – TheConstructor 2014-09-30 15:10:13
请提供您的架构,示例数据和预期结果。 – 2014-09-30 15:11:20
TheConstructor,表2中会有匹配的pidms,但是我需要匹配的pidms在第3列中不包含X,Y或Z,并且需要具体了解哪些缺失。 – 2014-09-30 15:23:38