撰寫一個查詢,回傳至少有一個孩子 (demo='child') 訪問過的所有頁面,并且還至少有一個 18-25 歲的人 (demo='18-25') 訪問過。您的查詢應回傳一組網址。
我不確定如何撰寫基于同一列上的兩個 AND 陳述句過濾出結果的查詢,并回傳一個空集。
這是兩個表:
用戶
| 用戶界面 | ip | 演示 |
|---|---|---|
| 一種 | 001 | 孩子 |
| 乙 | 002 | 18-25 |
訪問
| 網址 | dt | 用戶界面 | 源檔案 | 轉 |
|---|---|---|---|---|
| A01 | 1890-05-14 | 一種 | A02 | 10 |
| A01 | 002 | 乙 | A03 | 15 |
Select distinct V.url
from Visit V, [User] Z, [User] F
WHERE V.uid = Z.uid AND V.uid = F.uid
AND Z.demo = 'child' AND F.demo = '18-25'
上面的代碼回傳一個空集。
我希望它回傳 A01 作為 url
uj5u.com熱心網友回復:
看起來您可以在User表上 JOIN兩次:一次查找“18-25”的用戶,另一次查找“孩子”的用戶。如果您找到這兩個(由WHERE子句確定),則Visit記錄將包含在結果中:
SELECT
DISTINCT(V.url)
FROM
Visit V
LEFT JOIN User U ON (V.uid = U.uid AND U.demo = '18-25')
LEFT JOIN User U2 on (V.uid = U2.uid AND U2.demo = 'child')
WHERE
U.uid IS NOT NULL AND U2.uid IS NOT NULL
uj5u.com熱心網友回復:
您不必User兩次加入表,請使用更推薦的JOIN運算子 over comma-join。要獲得您想要的結果,您可以使用ORondemo或由于資料是特定的,您可以嘗試IN(). 考慮這兩個查詢示例:
/*Query 1*/
SELECT DISTINCT V.url
FROM Visit V
JOIN User U
ON V.uid = U.uid
WHERE (U.demo = 'child' OR U.demo = '18-25');
/*Query 2*/
SELECT DISTINCT V.url
FROM Visit V
JOIN User U
ON V.uid = U.uid
WHERE U.demo IN ('child','18-25');
檢查演示小提琴
uj5u.com熱心網友回復:
首先,您不需要在選擇運算式中兩次使用 User 表。
我認為它可以通過使用嵌套查詢或稱為子查詢來解決。
解釋:首先,您將查詢符合第一個條件 (demo='child') 的專案,然后您將在結果中搜索也符合第二個條件 (demo='18-25') 的專案。
您的代碼將是這樣的:
Select distinct V.url
from Visit V, [User] Z
WHERE V.uid = Z.uid AND Z.demo = 'child'
AND V.url IN (Select distinct V1.url
from Visit V1, [User] Z1
WHERE V1.uid = Z1.uid AND Z1.demo = '18-25')
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349922.html
