从多行中选择数据

时间:2014-10-14 07:09:14

标签: mysql sql

  1. 例如test第7列包含两行,如果number列包含值5和6,并且{{1}中的值 X 1}}列,我想选择在chr列中选择包含7的行。

  2. 例如test第10列包含三行,如果test列包含值5和6,并且值{strong> X 存在于{{1 }}列,我想在number列中排除10行。

  3. 以下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

4 个答案:

答案 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');

Fiddle Demo

答案 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  
相关问题