【发布时间】:2011-11-09 21:16:15
【问题描述】:
我有 4 张桌子:一张有活动,一张有那些活动的服务员,还有两张包含有关这些服务员的信息,可能是单人或一群人人。数据库的设计看起来很公平,对吧?
然后我需要知道谁将参加特定活动。然后,我将使用常规连接获取活动参加者的 type 及其 id。但我还需要服务员的names,根据服务员的type,将其存储在两个不同的表中。
看看我做了什么:
SELECT
ep.type_attendant 'type',
ep.id_attendant 'id',
IF( ep.type_attendant = 'user', CONCAT( u.firstname, ' ', u.lastname ), g.name ) 'fullname'
FROM
events_attendants ep,
events e,
users u,
groups g
WHERE
ep.id_event = e.id AND
ep.id_attendant = IF( ep.type_attendant = 'user', u.id, g.id )
这可行,但并不完美,因为它会为 groups 表返回重复的行。 我想结束的是这样的:(除了下面的那个不起作用)
SELECT
ep.type_attendant 'type',
ep.id_attendant 'id',
IF( ep.type_attendant = 'user', CONCAT( u.firstname, ' ', u.lastname ), g.name ) 'fullname'
FROM
events_attendants ep,
events e,
IF( ep.type_attendant = 'user', users u, groups g ) -- variable table
WHERE
ep.id_event = e.id AND
ep.id_attendant = IF( ep.type_attendant = 'user', u.id, g.id )
我也可以运行两个查询,并将它们的结果与 PHP 合并,但我是那种喜欢学习的人。
顺便说一句,MySQL 数据库。感谢您的帮助!
【问题讨论】:
-
您有两个选择 - 一个
IF来拆分两个查询,或者动态 SQL... -
@OMG 我最好骑小马:/
-
如果
users和groups表没有共同的id,那么您也可以使用UNION- 没有任何IF。 -
+1 表示希望学习并改掉使用 php 过程代码完成 SQL 工作的习惯
-
呃,A,B 连接语法是如此上个世纪。
标签: mysql sql join dynamic-sql