2011-04-20 105 views
0

我是mySql的新手,我試圖使用來自其他幾個表的數據從一列進行過濾查詢。例如,我可以拉一張名稱表,體育課中的一張表格以及一張運動表。MySQL WHERE XXX = ZZZ AND XXX = YYY

我可以查詢使用

WHERE beta.sport = 'basketball';拉所有公測ID對籃球的和有效的所有誰打籃球的孩子們這個數據庫。現在我想找到所有打籃球和Lacrosee的孩子。

WHERE beta.sport = 'basketball' AND beta.sport = 'lacrosse'; 

問題是查詢執行正常,但返回零結果。我知道通過手動查看我的數據,發現有孩子打籃球和長曲棍球。你如何過濾打籃球和曲棍球的孩子?或者返回可以踢長曲棍球或籃球的孩子。我只想回到同時玩這兩種遊戲的孩子,而我唯一能夠獲得的體育項目就是來自這個表格測試版。

TABLE的β

beta_id - sport || 
1 - basketball || 
2 - lacrosse || 
3 - football || 
4 - basketball || 
+0

您所查詢的說「籃球'AND beta.sport ='長曲棍球',但你在下一句話中說:「籃球和足球。」第二項運動是什麼? – rajah9 2011-04-20 12:57:01

+0

你在那個查詢中有長曲棍球,你是說足球嗎?基本上你有使用AND或OR的選擇。你也可以看看IN。 – ColWhi 2011-04-20 12:57:45

+0

除了Quassnoi之外,其他人都沒有看到這一點。雖然ccdpowell在寫一個簡單的「AND」時確實錯了,但他不想要「或」。當然,Quassnoi的解決方案假定鏈接表存在,並保存適當的信息,但它是迄今爲止唯一能夠給出正確方法的信息。 – anothershrubery 2011-04-20 13:01:06

回答

4
SELECT * 
FROM names n 
WHERE (
     SELECT COUNT(*) 
     FROM beta b 
     WHERE b.sport IN ('basketball', 'lacrosse') 
       AND b.name = n.id 
     ) = 2 
+0

謝謝! IN條款是我一直在尋找的,我不知道如何找到它。 – ccdpowell 2011-04-20 13:08:52

+0

@ccdpowell:'IN'子句只是'sport''basketball'或'sport''lacrosse''的簡單別名。在你正在尋找的子查詢中它是'COUNT(*)= 2'。 – Quassnoi 2011-04-20 13:16:33

0

「WHERE beta.sport = '籃球' AND beta.sport = '曲棍球';」這不能返回任何行,因爲你要求beta.sport是籃球和長曲棍球...嘗試或...在哪裏beta.sport ='籃球'或beta.sport ='長曲棍球';

你可以嘗試兩者的子查詢...

select * from sportsTable 
where itemID in 
(select itemID from sportsTable WHERE beta.sport = 'basketball') 
and itemID in 
(select itemID from sportsTable WHERE beta.sport = 'lacrosse') 
+0

我知道這是問題...如果我使用或我的結果將包括打籃球和不打長曲棍球的孩子。我只想得到那些同時打籃球和曲棍球的孩子的成績。 – ccdpowell 2011-04-20 12:58:47

+0

請參閱上面的更新代碼... – 2011-04-20 12:59:52

0
WHERE BETA.SPORT = 'BASKETBALL' OR BETA.SPORT = 'LACROSSE' 

注意去代替OR,AND。

1

你需要改變,並用OR

,不會手段:

我想誰打籃球的所有孩子和誰打曲棍球所有的孩子。

這是什麼意思是我想要所有的都踢長曲棍球和籃球的孩子。

當使用或習慣括號包裹你的病情如此

WHERE(beta.sport = '籃球' OR beta.sport = '曲棍球')

相關問題