我在MySQL数据库中有多个表,我希望能够使用一个表中的行值作为从另一个表中选择的列。例如,假设我的表格description
和information
如下:
-------------
| 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
因为只有fname
和lname
字段具有该隐私级别。我不是编写SQL查询的专家,而且我无法控制现有的数据库设计。如果这是显而易见的事情,我为不知道而道歉,但我真的很感激一些指导。
答案 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