一直在嘗試學習 SQL,但遇到了一個我想了解的問題:
給定下表:
TABLE - Customer.movie_id
ID MOVIE_ID
-------------
x Spiderman
y Batman
z Avengers
TABLE - Customer.game_id
ID GAME_ID
-------------
A COD
C HALO
D BATTLEFEILD
B MINECRAFT
TABLE - Customer.type_id
ID TYPE_ID
-------------
ii AGE
jj GENDER
kk INCOME
TABLE - Customer.Info
ID MOVIE_ID GAME_ID TYPE_ID DATA
--------------------------------------------
1 x A ii 20
2 x A jj F
3 x C kk 1000
4 y C ii 40
5 y D jj M
6 y C kk 5000
7 z B ii 60
8 z B jj F
9 z C kk 10000
僅當 MOVIE_ID 和 GAME_ID 匹配 GENDER 型別行上的相同值時,才會生成顯示 AGE 行的輸出。
TABLE - Customer.Info
ID MOVIE_ID GAME_ID TYPE_ID DATA
--------------------------------------------
1 x A ii 20
7 z B ii 60
我已經能夠在 python 中單獨進行查詢并在那里處理它,但我不知道如何將所有這些組合到一個查詢中。
任何人都可以幫忙嗎?
uj5u.com熱心網友回復:
這應該是最短的了。如果存在具有相同 ID 和性別的任何其他行,則回傳它:
select i1.*
from Customer.Info i1 inner join Customer.Info i2
on i2.MOVIE_ID = i1.MOVIE_ID and i2.GAME_ID = i3.GAME_ID
and i1.TYPE_ID = 'ii' and i2.TYPE_ID = 'jj'
where and exists (
select 1 from Customer.Info i3
where i3.ID <> i2.ID
and i3.MOVIE_ID = i2.MOVIE_ID and i3.GAME_ID = i2.GAME_ID
and i3.TYPE_ID = 'jj' and i3.DATA = i2.DATA
);
我不知道您是否打算將兩個以上的組全部匹配在一起而沒有變化。
uj5u.com熱心網友回復:
此資料模型未正確規范化,并且所有內容都命名不佳,但除此之外,您可能需要某種形式的 EXISTS 子句,例如:
select
i.*
from
customer.info i
join
customer.type_id ti on ti.id = i.type_id
where
ti.type_id = 'AGE'
and
exists(
select 1
from customer.info i2
join customer.type_id ti2 on ti2.id = i2.type_id
where i2.movie_id = i.movie_id
and i2.game_id = i.game_id
and ti2.type_id = 'GENDER'
)
/
或者,如果 EXISTS 不可用,您可以加入兩個子查詢:
select
age_info.*
from
(
select i.*
from customer.info i
join customer.type_id ti on ti.id = i.type_id
where ti.type_id = 'AGE'
) age_info
join
(
select distinct i.movie_id, i.game_id
from customer.info i
join customer.type_id ti on ti.id = i.type_id
where ti.type_id = 'GENDER'
) gender_info
on gender_info.movie_id = age_info.movie_id
and gender_info.game_id = age_info.game_id
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466824.html
下一篇:System.FormatException:'String'"2022-04-1413:03:12"'未被識別為有效的DateTime。
