Mysql:根据列中的值查找列名,在另一个表中搜索列名作为值

时间:2014-02-19 03:23:07

标签: mysql search phpmyadmin

天儿真好

我有2张桌子

RosterTable

ID:1
日期:19/02/14
UserA:N
UserB:N
UserC:Y
UserD:N

用户表

ID:1
用户名:UserA
姓名:约翰史密斯 ID:2
用户名:UserB
姓名:乔博客
等...

我正在尝试搜索RosterTable以查看“Y”指示的名单,并返回coulmn名称,然后使用该列名在UserTable中查找用户详细信息。

我无法更改这些表,因为它们用于其他内容。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

这是一个查询。它应该工作。主要思想是在RosterTable中为4个用户中的任何一个选择具有Y值的行,并使用两个表中常见的关联id加入UserTable

 select * from RosterTable rt 
 where rt.UserA = 'Y' 
 or rt.UserB = 'Y' 
 or rt.UserC = 'Y' 
 or rt.UserD = 'Y' 
 inner join UserTable ut on ut.ID = rt.ID

答案 1 :(得分:0)

如果我正确理解了这个问题,这是一个非常糟糕的数据库设计。这是一种方式:

select *
from UserTable ut
where exists (select 1
              from RosterTable rt
              where rt.UserA = 'Y' and ut.username = 'UserA' or
                    rt.UserB = 'Y' and ut.username = 'UserB' or
                    rt.UserC = 'Y' and ut.username = 'UserC' or
                    rt.UserD = 'Y' and ut.username = 'UserD'
             );