2017-08-25 9 views
0

私は、MySQL DBの整合性をチェックするSQLスクリプトを作成しています。クエリは、異なるテーブルの異なる側面をチェックするので、関連しません。私はそれらを関連させたくありません。私はちょうど別のクエリの結果を見たいと思っています。無関係なSQLサブクエリから複数の行を返します

個々のクエリは正常に動作しますが、同時に実行することもできますが、結果は別々にしておきます。何も返さないか、複数の行を返すことができます。 (理想的には、私は見出しが結果をより見やすくしたいのですが。)

エラーが

「エラーコード:1242サブクエリが複数の1行を返す」である

ここで何がだが私は試しました:

SELECT 
(-- Teams not associated with any employees 
SELECT id 
    FROM teams 
WHERE NOT EXISTS 
      (SELECT id 
      FROM employee_teams 
      WHERE employee_teams.teamID IN(teams.id))) AS TeamNoEmployee, 

(-- Teams deleted but associated with employees 
SELECT teamID 
    FROM employee_teams 
WHERE NOT EXISTS 
      (SELECT id 
      FROM teams 
      WHERE teams.id IN(employee_teams.teamID))) AS TeamsDeleted 

アップデート:@JohnHCを持っています。ここに私の新しいバージョンがあります。私は各クエリのヘッダーを追加できるようにする必要がありますので、私はそれらを区別することができます。

-- Teams not associated with any employees 
SELECT 'Team No Employee' AS Test, id 
    FROM teams 
WHERE NOT EXISTS 
      (SELECT id 
      FROM employee_teams 
      WHERE employee_teams.teamID IN(teams.id)) 
UNION 
-- Teams deleted but associated with employees 
SELECT 'Teams Deleted', teamID 
    FROM employee_teams 
WHERE NOT EXISTS 
      (SELECT id 
      FROM teams 
      WHERE teams.id IN(employee_teams.teamID)) 
+3

UNION ALLを使用するとどうなりますか? –

+0

問題は、各サブクエリに異なる数のチームが存在する可能性があります。したがって、異なる数の行があります。 SQLはそれを好まない。 – RealCheeseLord

+0

Thx @RealCheeseLord。各サブクエリの結果を個別に表示するにはどうすればよいですか? – beachCode

答えて

3

あなたは実際にテーブル内のそれらを関連付けるわけではありません。他の方法でこのように試してみましょう:

select 'Empty Team' as Scenario, id 
from teams t1 
left join employee_teams et 
    on et.teamID = t1.id 
where et.id is null 
union 
select 'Deleted Team', teamid 
from employee_teams et 
left join teams t2 
    on t2.id = et.teamID 
where t2.id is null 
+0

2番目のクエリを確認します。 OPはチームIDが必要です。私は 'SELECT DISTINCT teamID .. 'のようなものを期待しています。 – Serg

+0

@Serg良い点、ありがとう。明白ではない、私は 'union all 'の代わりに' union'に移った。 – JohnHC

+0

答えをありがとう。私は実際にそれらを関連させたいと思わない。私はちょうど別のクエリの結果を見たいと思っています。 – beachCode

関連する問題