例如test
第7列包含两行,如果number
列包含值5和6,并且{{1}中的值 X 1}}列,我想选择在chr
列中选择包含7的行。
例如test
第10列包含三行,如果test
列包含值5和6,并且值{strong> X 存在于{{1 }}列,我想在number
列中排除10行。
以下Schema的Demo和SQL查询损坏的SQL查询可用。
架构:
chr
SQL:
test
如果CREATE TABLE TEST_DATA (ID INT, TEST INT, CHR VARCHAR(1), NUMBER INT);
INSERT INTO TEST_DATA VALUES
( 1 , 7 , 'C' , 5),
( 2 , 7 , 'T' , 6),
( 3 , 8 , 'C' , 4),
( 4 , 8 , 'T' , 5),
( 5 , 9 , 'A' , 4),
( 6 , 9 , 'G' , 5),
( 7 , 10 , 'T' , 4),
( 8 , 10 , 'A' , 5),
( 9 , 10 , 'X' , 6),
(10 , 14 , 'T' , 4),
(11 , 14 , 'G' , 5);
列包含5和6且SELECT *
FROM test_data t1, test_data t2
WHERE t1.number=5 is not t1.chr=X AND
t2.number=6 is not t2.chr=X;
列不包含 X ,如何保留test
列?
更新结果它应该只有number
列7,因为chr
列7在test
列中有5和6而不是X.
更新2 结果示例:
test
答案 0 :(得分:1)
如果我理解正确的要求......
SELECT a.test
FROM test_data a
LEFT
JOIN test_data b
ON b.test = a.test
AND b.chr = 'x'
WHERE a.number IN (5,6)
AND b.id IS NULL
GROUP
BY a.test
HAVING COUNT(*) = 2;
http://www.sqlfiddle.com/#!2/1939f/4
您可以将此结果重新加入test_data
,以获得test
等于7的所有结果
答案 1 :(得分:0)
试试这个。
SELECT *
FROM test_data
WHERE number IN (5,6)
AND test NOT IN (10)
AND chr NOT IN ('X');
答案 2 :(得分:0)
这是你需要的吗?
[编辑]
select o.*
FROM
test_data o,
(SELECT o.TEST
FROM test_data o
WHERE o.NUMBER = 5) five,
(SELECT o.TEST
FROM test_data o
WHERE o.NUMBER = 6) six
WHERE five.TEST = six.TEST
AND o.TEST = five.TEST
AND o.TEST NOT IN (SELECT distinct TEST FROM test_data WHERE chr = 'X')
结果是,
ID | TEST | CHR | NUMBER
1 7 C 5
2 7 T 6
答案 3 :(得分:0)
你想要这样吗?
SELECT *
FROM test_data
WHERE ID NOT IN
(
SELECT ID
FROM test_data
WHERE CHR='X'
AND NUMBER IN (5,6)
)
AND NUMBER IN (5,6)
ID | TEST | CHR | NUMBER
1 | 7 | C | 5
2 | 7 | T | 6
4 | 8 | T | 5
6 | 9 | G | 5
8 | 10 | A | 5
11 | 14 | G | 5