我有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'