查询未显示我需要的所有结果

时间:2012-01-14 23:05:11

标签: mysql

我有以下数据库表(人员):

+--------+--------+--------+--------+
|  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  |

但是,当您添加更多建筑物时,包含此表格将是一项巨大的工作

5 个答案:

答案 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 ;

这应该会给你想要的结果。