【问题标题】:Mysql: Find a column name dependant on a value in the column, search for colunm name as value in another tableMysql:根据列中的值查找列名,在另一个表中搜索列名作为值
【发布时间】:2014-02-19 11:38:28
【问题描述】:
纪念日
我有两张桌子
名册表
ID:1
日期:19/02/14
用户A:N
用户B:N
用户C:是
用户D:N
用户表
ID:1
用户名:UserA
姓名:约翰·史密斯
编号:2
用户名:UserB
名称:乔博客
等等……
我正在尝试搜索 RosterTable 以查看由“Y”指示的名单并返回列名,然后使用该列名在 UserTable 中查找用户详细信息。
我无法更改这些表格,因为它们已用于其他用途。
感谢您的帮助
【问题讨论】:
标签:
mysql
search
phpmyadmin
【解决方案1】:
如果我正确理解问题,这是一个非常糟糕的数据库设计。这是一种方法:
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'
);
【解决方案2】:
这是一个查询。它应该工作。主要思想是为 4 个用户中的任何一个选择具有 Y 值的 RosterTable 中的行,并使用两个表中通用的关联 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