1

同じテーブルで同じ条件でSELECTを実行するクエリが2つあります。この重複を取り除くのを手伝ってくれませんか。

if exists(select count(1)    
              from (<table>) t   
              where  (<condition>)   
              having count(1) = 1)   
    set @yes = 1    

if @yes = 1    
    select @x = X   
        from (<table>) t   
        where  (<condition>)
4

4 に答える 4

2

あなたのコードは以下と同等です:

select @yes = 1,@x=max(X) from (<table>) t   
       where  (<condition>)   
       having count(1) = 1
于 2012-12-26T10:41:13.027 に答える
1

EXISTSWHERE別の条件として使用できます。

SELECT @x = X
FROM   <table> t
WHERE  <condition>
AND    EXISTS (
    SELECT 1
    FROM   <table> t1
    WHERE  <condition>
    HAVING count(*) = 1
    );

基本的には行修飾しかない場合のみXから選択します。 または(もっと速いかもしれません):<table>

SELECT @x = X
FROM  <table> t
WHERE <condition>
AND NOT EXISTS (
    SELECT 1
    FROM   <table> t1
    WHERE  <condition>
    AND    t1.id <> t.id     -- no other row satisfies same conditions
    );

id主キーまたは<table>.
逆のロジック:他の行が適格でない場合は、適格な行のみを選択します。

于 2012-12-26T10:29:20.417 に答える
1

これを意味するかどうかを確認してください:

    select 
      @x = X   
    from 
      (<table>) t   
    where  
      (<condition>)
    group by X
    having count(*) = 1

また

select 
    @x = X  
from(
    select 
        count(*) over() cnt, X    
    from 
        (<table>) t  
    where  
        (<condition>)
)a
WHERE a.cnt=1
于 2012-12-26T10:29:32.007 に答える
0

テーブルの「X」フィールドが null でない場合は、次のクエリを使用できます。

SET @x = null

SELECT @x = X   
        FROM (<table>) t   
        WHERE (<condition>)
IF (@x IS NOT NULL) BEGIN SET @yes = 1 END
于 2012-12-26T10:33:04.103 に答える