从临时表中选择多行中的数据由SELECT创建

时间:2014-10-18 02:49:14

标签: mysql sql

我有以下SQL查询,它以某种方式被破坏了:

SELECT *
FROM (
    SELECT ID, TEST, CHR, NUMBER
    FROM Test_Table 
    JOIN ...
    WHERE ...
) TEMP_TABLE
FROM TEMP_TABLE a
LEFT
JOIN TEMP_TABLE 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;

从第一个FROM语句中我得到以下临时表:

 ID    , TEST,  CHR   ,  NUMBER
 ------------------------------
( 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);

FROM TEMP_TABLE ...我尝试实施以下条件:

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

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

  3. 因此,它应该只有chr列7,因为test列7在test列中有5和6而不是X.

    结果示例:

    test

    上述SQL查询出了什么问题?

1 个答案:

答案 0 :(得分:3)

您的查询有两个FROM子句删除一个并尝试如下

SELECT *
FROM (
    SELECT ID, TEST, CHR, NUMBER
    FROM Test_Table 
    JOIN ...
    WHERE ...
)  a
LEFT JOIN 
 (
    SELECT ID, TEST, CHR, NUMBER
    FROM Test_Table 
    JOIN ...
    WHERE ...
)  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;

更简单的方法是使用TEMPORARY关键字创建TEMPORARY表格,如提及here

CREATE TEMPORARY TABLE TEMP_TABLE (ID int, TEST varchar(100), CHR char, NUMBER int ); 

INSERT INTO TEMP_TABLE
 (SELECT ID, TEST, CHR, NUMBER
FROM Test_Table 
JOIN ...
WHERE ...);


SELECT *
FROM TEMP_TABLE a
LEFT
JOIN TEMP_TABLE 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;
相关问题