我有以下数据库表(人员):
+--------+--------+--------+--------+
| Name |Building| Nr | Time |
+--------+--------+--------+--------+
| Tim | House | 30 | 10:10 |
| Jill | House | 31 | 10:20 |
| Tim | Flat | 31 | 10:30 |
| NULL | Tower | NULL | NULL |
| Jack | Hut | 32 | 10:50 |
| Jane | Cabin | 35 | 10:60 |
| Susan | Cabin | 35 | 11:70 |
+--------+--------+--------+--------+
现在我要展示Tim拥有的所有建筑物(以及随附的数据)。我是这样做的:
SELECT * FROM `People` WHERE Name="Tim"
结果:
+--------+--------+--------+--------+
| Name |Building| Nr | Time |
+--------+--------+--------+--------+
| Tim | House | 30 | 10:10 |
| Tim | Flat | 31 | 10:30 |
到目前为止一切顺利。问题是,有更多的建筑物(塔,小屋和小屋)。我也想展示这些,但将数据(接受建筑类型)留空。
这个结果是我需要的:
+--------+--------+--------+--------+
| Name |Building| Nr | Time |
+--------+--------+--------+--------+
| Tim | House | 30 | 10:10 |
| Tim | Flat | 31 | 10:30 |
| NULL | Tower | NULL | NULL |
| NULL | Hut | NULL | NULL |
| NULL | Cabin | NULL | NULL |
+--------+--------+--------+--------+
由于Tower已经为NULL,我可以使用以下方法轻松提取:
SELECT * FROM `People` WHERE Name="Tim" OR Name is NULL
结果:
+--------+--------+--------+--------+
| Name |Building| Nr | Time |
+--------+--------+--------+--------+
| Tim | House | 30 | 10:10 |
| Tim | Flat | 31 | 10:30 |
| NULL | Tower | NULL | NULL |
+--------+--------+--------+--------+
问题是,我仍然想念小屋和小屋。这甚至可以用查询完成吗?还尝试了一些选项,如GROUP BY等,但这给了混合数据作为回报。也使用谷歌搜索但没有运气。
希望有人能帮助我!
PS。作为一种解决方法,我可以在db中添加:
| NULL | Hut | NULL | NULL |
| NULL | Cabin | NULL | NULL |
但是,当您添加更多建筑物时,包含此表格将是一项巨大的工作
答案 0 :(得分:3)
像
这样的东西select * from people where Name = 'Tim'
union
select 'NULL', Building, NULL, NULL from people where Name != 'Tim';
可以做你想做的事吗?
答案 1 :(得分:2)
你的桌子没有显示蒂姆拥有(塔,小屋,小屋),否则它会显示在你发布的第一个查询中。数据库在开始时为您提供正确的信息。如果Tim想拥有其他类型的结构,那么数据需要反映出来。
答案 2 :(得分:2)
您可以通过考虑您的查询来解决此问题;你问数据库有两个问题:
1)告诉我Tim拥有的所有建筑类型
2)向我展示蒂姆不拥有的所有建筑类型。
执行此操作的最简单方法是UNION查询:
SELECT Name, Building, Nr, Time FROM People WHERE Name = 'Tim'
UNION
SELECT DISTINCT NULL, Building, NULL, NULL FROM People WHERE Building NOT IN (SELECT Building FROM People WHERE Name = 'Tim')
那应该为你做。
答案 3 :(得分:0)
真的很奇怪,你确定你没有GROUP BY Nr或Time吗?尝试使用转义查询:
SELECT * FROM `People` WHERE `Name`="Tim" OR `Name` is NULL OR `Name`='NULL' OR `NAME`=''
可能是你有字符串NULL而不是真正的NULL。只需提示一下,尝试在dbs中使用字段名称中的小写字母。
答案 4 :(得分:0)
SELECT IF(Name='Tim',Name,NULL) AS Name,
Building,
IF(Name='Tim',Nr,NULL) AS Nr,
IF(Name='Tim',Time,NULL) AS Time
FROM People ;
这应该会给你想要的结果。