表Person_Attribute結構如下:
field 1: person_id
field 2: attribute_name (gender,nationality,age etc.)
fiield 3: attribute_type (int,double,string etc.)
field 3 : attribute_value (gender(male,female),nationality (chinese,american etc.)
attribute_value 的數據格式為 String
請教列出所有年齡大於21嵗的中國籍男子之person_id之sql語句。
你这个问题只不过是在https://ask.csdn.net/questions/1097516
的基础上多加了一个条件
所以只需要多加一个exists
SELECT p.* FROM person p
WHERE EXISTS
(
SELECT 1 FROM person_attribute pa
WHERE p.id=pa.person_id AND pa.attribute_name='gender' AND pa.attribute_value='male'
)
AND EXISTS
(
SELECT 1 FROM person_attribute pa
WHERE p.id=pa.person_id AND pa.attribute_name='nationality' AND pa.attribute_value='chinese'
)
AND EXISTS
(
SELECT 1 FROM person_attribute pa
WHERE p.id=pa.person_id AND pa.attribute_name='age' AND CONVERT(pa.attribute_value,SIGNED)>21
)
ORDER BY p.name
以后碰到类似的,要学会举一反三
SELECT person_id FROM Person_Attribute WHERE nationality = 'chinese' AND gender = 'male' AND age > 21
https://ask.csdn.net/questions/1097516
参考我在那个上面的回答,把where条件修改下即可。写了半天也没有采纳,就不详细写了。