我有一個屬性表:
---- -----------------------------
| prop_id | prop_name |
--------- ------------------------
| 1 | Cottage |
--------- ------------------------
| 2 | Mountain House |
--------- ------------------------
| 3 | Beach house |
--------- ------------------------
附件一表:
---- -----------------------------
| acc_id | acc_name |
--------- ------------------------
| GAR | With garden |
--------- ------------------------
| TER | With terrace |
--------- ------------------------
| REN | Recently renovated |
--------- ------------------------
關聯屬性和附件的表(properties2accessories):
---- --------------
| prop_id | acc_id |
--------- ---------
| 1 | GAR |
--------- ---------
| 1 | REN |
--------- ---------
| 2 | GAR |
--------- ---------
| 2 | REN |
--------- ---------
| 2 | TER |
--------- ---------
| 3 | GAR |
--------- ---------
| 3 | TER |
--------- ---------
我需要所有具有我作為引數傳遞的附件的屬性。
正確的例子:
a) 帶有“花園”和“最近裝修”的房產:
我應該得到道具:1、2
b) 帶有“花園”和“露臺”的屬性:
我應該得到道具:2、3
我嘗試:
SELECT *
FROM properties2accessories
WHERE acc_id IN ('GAR', 'REN');
但這也得到了道具 3,但沒有“最近翻新”
我正在使用 Postgres 13
有幫助嗎?
uj5u.com熱心網友回復:
你可以這樣做:
SELECT prop_id from (
select prop_id, array_agg(acc_id) acc_array
FROM properties2accessories
group by prop_id) d
WHERE array['GAR', 'REN'] <@ acc_array;
uj5u.com熱心網友回復:
這就是 HAVING 可以為你做的,它是整個組的 WHERE 條件:
SELECT prop_id
FROM properties2accessories
WHERE acc_id IN ('GAR', 'REN')
GROUP BY prop_id
HAVING ARRAY_AGG(acc_id) @> ARRAY['GAR', 'REN'];
uj5u.com熱心網友回復:
如果特定 id 存在另一個條件,您可以檢查 exists
SELECT
"prop_id"
FROM properties2accessories p
WHERE ("acc_id" = 'GAR')
AND EXISTS (SELECT 1 FROM properties2accessories WHERE "acc_id" = 'REN' AND "prop_id" = p."prop_id")
| prop_id |
|---|
| 1個 |
| 2個 |
SELECT 2
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536544.html
上一篇:過濾陣列中的元素
