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

时间:2012-02-24 16:27:29

标签: 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

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

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

因为只有fnamelname字段具有该隐私级别。我不是编写SQL查询的专家,而且我无法控制现有的数据库设计。如果这是显而易见的事情,我为不知道而道歉,但我真的很感激一些指导。

2 个答案:

答案 0 :(得分:0)

更新 - 新答案

在@Brian评论之后,我意识到根据我的评论,mySQL subquery很可能会让你根据之前的结果进行查询。

RoseIndia.net对他们有一个相当不错的概述会给你一个良好的开端。

OLD ANSWER

您最有可能寻找LEFT JOIN来实现这一目标。

我假设id列彼此相关,以便开始。我个人会有2个单独的主键,然后使用外键将1个表与另一个表关联,但继续前进。

我建议你查看KeithJBrown.co.uk,它有很好的解释和不同类型连接的一些很好的例子。

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

我希望这有助于您走上正轨,下次首先与Google进行一些研究,尝试一些事情然后当您遇到困难时寻求帮助。

答案 1 :(得分:0)

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

你是否有所有的范围来更改数据模型,即使只添加新内容(即不更改/删除现有模型)?

你所尝试的并非不可能,但是工作要困难得多......

编辑 - 使用动态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