我应该在这里使用哪个SQL连接



我有2个SQL表,一个用于用户表,一个用于关于用户的所有事情。(年龄、性别等)

用户表:

id, username, mail, etc

第二个表

id, user_id, type_id, content

user table 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在join中,而不是>和<并且可以以>

的形式加入表
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'

最新更新