簡體   English   中英

我應該在這里使用哪個SQL連接?

[英]Which SQL join should I use here?

我有2個SQL表,一個用於用戶表,一個用於關於用戶的所有事情。 (年齡,性別等)

用戶表:

id, username, mail, etc

第二張桌子

id, user_id, type_id, content

用戶表內容:

1, knife, knife@something.com, etc ...

第二表:

1, 1, 38 (age)
1, 3, Male

我希望得到20-40歲之間和男性之間的用戶。 我現在在這里:

SELECT 
        *
FROM 
        felhasznalok_kieg_adat
        JOIN felhasznalok
                ON felhasznalok_kieg_adat.user_id = felhasznalok.id
WHERE 
   felhasznalok_kieg_adat.kieg_id = "22" 
   and felhasznalok_kieg_adat.tartalom < 21 
   and felhasznalok_kieg_adat.tartalom < 40

它顯示了21到40歲之間的結果,但我怎樣才能添加男性或女性的東西?

您必須加入一次年齡過濾器,第二次加入性別過濾器。

SELECT User.*
FROM User
    JOIN UserContent ageFilter
        ON ageFilter.user_id = User.id
        AND ageFilter.type_id = 1  -- use type_id for joining
    JOIN UserContent genderFilter
        ON genderFilter.user_id = User.id
        AND genderFilter.type_id = 3
WHERE (ageFilter.content < 21 AND ageFilter.content < 40) -- what type is content? You have to make some sort of conversion here!
AND (genderFilter.content = 'Male')

我已根據您在問題中描述的內容替換了表和列的名稱。
在連接中添加type_id ,它以這種方式變得更加可重用。

SELECT *
  FROM felhasznalok_kieg_adat
  JOIN felhasznalok ON felhasznalok_kieg_adat.user_id = felhasznalok.id
 WHERE ((felhasznalok_kieg_adat.kieg_id = "22" 
        AND felhasznalok_kieg_adat.tartalom < 21 
        AND felhasznalok_kieg_adat.tartalom < 40))
   AND felhasznalok_kieg_adat.gender = 'male'

選擇一些值,例如男性為“M”,女性為“F”。 然后:

ALTER TABLE felhasznalok_kieg_adat ADD COLUMN sex CHAR(1);

而您對男性的選擇將如下所示:

SELECT *
FROM felhasznalok_kieg_adat
JOIN felhasznalok
ON felhasznalok_kieg_adat.user_id = felhasznalok.id
WHERE ((felhasznalok_kieg_adat.kieg_id = "22" and felhasznalok_kieg_adat.tartalom < 21 and felhasznalok_kieg_adat.tartalom < 40)) and (sex = 'M')

如果您沒有性別列,如果可能,您必須將其添加到表格中

你可以在你的連接中使用BETWEEN而不是>和<,你可以加入表格

SELECT *
FROM table1
JOIN table2
ON table1.user_id = table2.id
WHERE ((table1.kieg_id = "22" and table1.tartalom BETWEEN 21 AND 22))


AND table1.gender = 'male'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM