0

3 つのテーブルを指定してクエリを実行しようとしています。

DECLARE @TABLE1 TABLE (ID CHAR(2))
DECLARE @TABLE2 TABLE (ID CHAR(2))
DECLARE @TABLE3 TABLE (ID CHAR(2))

INSERT INTO @TABLE1 VALUES('1')
INSERT INTO @TABLE1 VALUES('2')
INSERT INTO @TABLE2 VALUES('1')

--NOTHING in TABLE3

存在する値のみを取得し、null テーブルを無視する必要があります。TABLE3 には値がないため、これは機能しません。

SELECT ID 
  FROM @TABLE1 
INTERSECT 
SELECT ID 
  FROM @TABLE2 
INTERSECT  
SELECT ID 
 FROM @TABLE3

 **Result should be 1**

null のテーブルを無視して他の値を保持するにはどうすればよいですか?

4

3 に答える 3

1

各テーブルから異なるものを選択し、それを ID でグループ化し、count(*) を選択して、count(*) が結果の count(*) の最大値に等しい行のみを選択してみませんか?

残念ながら、この時点でサブクエリが少し混乱していますが、ロジックを取得する必要があります:)

于 2013-01-22T03:52:34.313 に答える
1

条件を追加できないため、交差は機能しません。

私が理解していることから、IDが少なくとも2つのテーブルに表示されるすべてのレコードを選択したいと考えています。ID は各テーブルに一意であると想定しています。

以下は、MS SQL Server で機能します。

DECLARE @TABLE1 TABLE (ID CHAR(2))
DECLARE @TABLE2 TABLE (ID CHAR(2))
DECLARE @TABLE3 TABLE (ID CHAR(2))

INSERT INTO @TABLE1 VALUES('1')
INSERT INTO @TABLE1 VALUES('2')
INSERT INTO @TABLE2 VALUES('1')

--NOTHING in TABLE3
;WITH AllValues AS
(
    SELECT ID 
    FROM @TABLE1 
    UNION ALL
    SELECT ID 
    FROM @TABLE2 
    UNION ALL
    SELECT ID 
    FROM @TABLE3
)
SELECT  ID
FROM    AllValues
GROUP BY ID
HAVING  COUNT(*) > 1
于 2013-01-22T06:07:15.460 に答える
0

たぶん... でも、システムの設計は非常に異質です。実際の例は、何をしようとしているのかを理解するのに役立ちます。

Select count(*), ID FROM (
Select ID from @table1
UNION
Select ID from @table2
UNION
Select ID from @table3) Derived
Where RowNum =1   
GROUP BY ID
ORder by count(*) DESC

where句が間違った場所に更新されました

于 2013-01-22T04:18:33.437 に答える