問題:查詢借閱了機械工業出版社出版的書名中含有數‘據庫書’三個字的圖書但沒有借閱了科學出版社出版的書名中含有數‘據庫書’三個字的圖書的讀者姓名、書名。
(個人理解:說明查詢到的讀者一定借閱了機械工業出版社的含有資料庫三字的圖書,但是該讀者可能借閱了科學出版社出版的書名中不含資料庫三字的圖書,也可能沒有借閱一本科學出版社出版的圖書。但是該讀者如果借閱了科學出版社出版的書名中含有資料庫三個字的圖書的話,則不符合要求) 以下是我sqlplus中寫代碼:

(有三個表:book,reader,borrow。borrow表是book表與reader表的父表)
(我的理解是先寫出想要查詢的列:讀者姓名和圖書書名,然后將這三個表做連接。再根據條件選出借閱了機械工業出版社出版的書名中含有資料庫三個字的圖書,然后將他們按借閱者的姓名分組,再從分組中選擇滿足條件的人。但是為啥不對?還有就是group by后面一定要跟select陳述句后面所跟的列名么??????)
uj5u.com熱心網友回復:
group by后面一定要跟select陳述句后面所跟的列名么??????select 后面的 非聚合列,必須都放在 group by 后面。
uj5u.com熱心網友回復:
Oracle是這樣,Mysql就不用。
uj5u.com熱心網友回復:
放在后面的having子句中不可以么?那如果必須放在group by子句后面的話就與題意不符了。。。還有就是分組后再having是對該組進行操作么?比如說有一個人借閱了兩本書,一本是機械工業出版社出版的含有資料庫三個字的書,另一本是科學出版社出版的也含有資料庫三個字的書(那么這個人在查詢結果中應該有兩行資料,但是現在按讀者名分組,是不是就代表這兩行是一組資料,如果這個人滿足題意則被篩選出來,如果不滿足題意這兩行都不會被篩選出來???)我迷惑在這兒
uj5u.com熱心網友回復:
having 后面,要寫聚合函的邏輯運算。uj5u.com熱心網友回復:
嗯,mysql 支持這樣的語法,如果用 mysql 時間長了,突然換成 oracle 或 mssql ,都會有這樣的疑問:“我的陳述句好好的,怎么就報錯了呢。”
uj5u.com熱心網友回復:
mark下,這么看沒發現哪錯了啊uj5u.com熱心網友回復:
這樣子查詢結果是只出來借了機械工業的吧?是不是把科學出版社不包括資料庫的也全過濾掉了uj5u.com熱心網友回復:
建議把having后面的條件放在where子句中,因為having子句是對分組條件的篩選,而group by前面的where才是對查詢結果的篩選。簡單點來說,就是having后面的條件只能限制reader.姓名、book.書名,不能對其他欄位進行限制。所以樓主的陳述句發生了錯誤。uj5u.com熱心網友回復:
試試這樣呢
SELECT T.姓名, T.書名
FROM (SELECT READER.姓名, BOOK.書名, BOOK.出版社
FROM BOOK, READER, BORROW
WHERE READER.讀者號 = BORROW.讀者號
AND BOOK.圖書號 = BORROW.圖書號
AND BOOK.書名 LIKE '%資料庫%'
AND BOOK.出版社 <> '科學出版社') T
WHERE T.出版社 = '機械工業出版社'
GROUP BY T.姓名, T.書名
uj5u.com熱心網友回復:
試試這樣呢
SELECT T.姓名, T.書名
FROM (SELECT READER.姓名, BOOK.書名, BOOK.出版社
FROM BOOK, READER, BORROW
WHERE READER.讀者號 = BORROW.讀者號
AND BOOK.圖書號 = BORROW.圖書號
AND BOOK.書名 LIKE '%資料庫%'
AND BOOK.出版社 <> '科學出版社') T
WHERE T.出版社 = '機械工業出版社'
GROUP BY T.姓名, T.書名
上面那個好像不對,可以這樣
CREATE VIEW v_jyts AS (SELECT READER.姓名, BOOK.書名, BOOK.出版社
FROM BOOK, READER, BORROW
WHERE READER.讀者號 = BORROW.讀者號
AND BOOK.圖書號 = BORROW.圖書號
AND BOOK.書名 LIKE '%資料庫%');
SELECT 姓名,書名 FROM v_jyts WHERE 姓名 IN(SELECT 姓名 FROM v_jyts WHERE 出版社 = '機械工業出版社')
AND 姓名 NOT IN (SELECT 姓名 FROM v_jyts WHERE 出版社 = '科學出版社')
GROUP BY 姓名,書名
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96323.html
標籤:基礎和管理
