繁体   English   中英

使用一个表中的行值来确定要从MySQL中另一表中选择的字段

[英]Using row values from one table to determine fields to select from another table in MySQL

我在MySQL数据库中有多个表,我希望能够将一个表中的行值用作从另一表中选择的列。 例如,假设我的表descriptioninformation如下:

 -------------
| description |
 -------------
id  colalias    privacy
--  --------    -------
1   fname       3
2   lname       3
3   salary      2
4   empid       1

 -------------
| information |
 -------------
id  fname   lname   salary  empid
--  -----   -----   ------  -----
1   Bob     White   50000   12345
2   Tom     Black   75000   54321
3   Sue     Green   82000   67890
4   Ann     Brown   63000   09876

假设我想返回一个表,该表从description.privacy等于3的information中提取所有数据。因此,我希望输出为

fname   lname   
-----   -----   
Bob     White   
Tom     Black   
Sue     Green   
Ann     Brown

因为只有fnamelname字段具有该隐私级别。 我不是编写SQL查询的专家,并且无法控制现有的数据库设计。 如果这是一件显而易见的事情,我对此深表歉意,但我将不胜感激。

更新-新答案

在@Brian评论之后,我已经意识到,根据下面的评论,mySQL subquery可能会成功完成,使您可以基于先前的结果进行查询。

RoseIndia.net上有关于它们的相当不错的概述,它将为您提供一个良好的开端。

老答案

您最有可能希望通过LEFT JOIN实现这一目标。

我假设id列彼此相关。 就我个人而言,我将有2个单独的主键,然后使用外键将1个表与另一个表相关联,然后继续。

我建议您查看KeithJBrown.co.uk ,其中提供了很好的解释以及一些不同类型的联接的良好示例。

最后,仅获取所需的列,只需在SQL语句中将它们指定为SELECT information.fname, information.lname

我希望这可以帮助您走上正确的道路,并且下次下次与Google进行一些研究时,请尝试一些尝试,然后在遇到困难时寻求帮助。

实际上,您的数据模型确实阻碍了您的工作,隐私级别和数据之间的链接最好仅通过数据在表中建模,而不是将数据 (隐私级别)链接到结构 (字段名称)。

你是否有在所有范围内的任何改变数据模型,即使只是在新添加的东西(即不改变/删除现有模型)?

您正在尝试的事情并非不可能,但这会更加艰巨。

编辑-使用动态SQL的快速示例:

http://forums.mysql.com/read.php?60,27979,30437

编辑-一个数据模型示例将有所帮助,尽管它对您正在使用的模型有很大的重构,所以动态SQL路由可能更实用...

field_name  field_security_level  user_id  user_emp_id  field_value
----------  --------------------  -------  -----------  -----------
fname       3                     1        12345        Bob
lname       3                     1        12345        White

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM