2014-10-29 54 views
1

我是新來的sql查詢。我正在寫一個查詢,其中我想返回標題SQL條件獲得「a」或「b」但不是兩者都

我有以下查詢到目前爲止,它的工作原理,但它不會返回我正確的結果。 如果有人能指導我哪裏出錯了。

SELECT movie_title, release_year 
FROM (
SELECT m.movie_title, m.release_year,COUNT(n.won), 
COUNT(c.actor_name) 
FROM MOVIE m JOIN ON (n.movie_title=m.movie_title AND n.release_year=m.release_year) 
JOIN on (c.movie_title=m.movie_title AND c.release_year=m.release_year) 
GROUP BY m.movie_title, m.release_year 
HAVING COUNT(n.won)>2 OR COUNT(c.actor_name)>2 
); 

我在網上看過例子,但一直未能得到確切的結果。

謝謝你的幫助。

+0

你爲什麼從'FROM'條款刪除2個表?該查詢現在無效(「JOIN」後缺少表格)。 – 2014-11-27 02:58:43

回答

3

將您的狀況更改爲;

HAVING (COUNT(n.won) > 1 AND COUNT(c.actor_name) < 2) 
     OR (COUNT(n.won) < 2 AND COUNT(c.actor_name) > 1) 

或者使用上一張海報中提到的更簡潔的XOR;

HAVING COUNT(n.won) > 1 XOR COUNT(c.actor_name) > 1 
+0

謝謝你的回覆。這對我來說更有意義,但只是一個後續問題。不應該COUNT(n.won)> 2?如果你能解釋一點。謝謝你的幫助 – Maddy 2014-10-29 02:39:21

+1

你問了2個或更多,你可以使用'COUNT(n.won)> = 2',但我更喜歡簡潔的版本'COUNT(n.won)> 1',它本質上是相同的東西。你原本只會得到2以上,即3和以上。 – harvey 2014-10-29 02:41:42

1

大多數數據庫系統都有一個XOR運算符,這正是您想要的行爲。

MySQL documentation

[XOR]返回NULL如果操作數是NULL。對於非NULL操作數,如果奇數個操作數非零,則計算爲1,否則返回0

而且從Oracle 11g documentation

XOR:返回TRUE如果任一組件條件TRUE。如果兩者均爲FALSE,則返回FALSE。否則返回UNKNOWN

從數學的角度來看,XOR代表獨立OR;它的字面意思是「一個或另一個,但不是兩個」。有趣的是,它在邏輯上等於NOT AND,所以你可以使用它。

+0

我沒有想到異或操作。但是,這也適用。謝謝。 – Maddy 2014-10-29 02:42:44

1

這樣做的另一個方法是通過工會與另一組由:

select * from (select movie_title, release_year from movie m 
 
JOIN CAST_MEMBER c on (c.movie_title=m.movie_title AND c.release_year=m.release_year) 
 
group by m.movie_title, m.release_year 
 
having count(*)>1) cm 
 
union all 
 
select * from (select movie_title, release_year from movie m 
 
JOIN NOMINATION n on (n.movie_title=m.movie_title AND n.release_year=m.release_year) 
 
group by m.movie_title, m.release_year 
 
having count(*)>1) nm 
 
group by movie_title, release_year 
 
having count(*) = 1

相關問題