2017-08-25 58 views
0

我在寫一個SQL腳本來檢查MySQL數據庫的完整性。查詢檢查不同表格的不同方面,所以它們不相關。我不想與他們聯繫。我只想一個接一個地看到不同查詢的結果。從不相關的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

檢查第二個查詢。 OP需要團隊ID,我期望像'SELECT DISTINCT teamID ..' – Serg

+0

@Serg好點,謝謝。沒有明顯的,我已經轉移到'工會'而不是'工會全部' – JohnHC

+0

感謝您的答案。我其實不想和他們聯繫。我只想一個接一個地看到不同查詢的結果。 – beachCode