基于表2中的单个列返回表1的值

时间:2018-08-05 23:53:04

标签: mysql sql

我正在使用3个表,并且需要进行查询以根据第二个表中单个列的值从一个表返回数据。

  • tbl_user

    • ID
    • 登录
    • 通过
    • 活动
    • mscID
  • tbl_master

    • ID
    • 名称
    • training_date
    • MSCUnit
    • 活动
  • tbl_msc

    • mscID
    • mscName

我当前的SQL语句:

SELECT
   tbl_master.ID,
   tbl_master.name, 
   tbl_master.training_date, 
   tbl_master.MSCUnit,
   tbl_master.active, 
   tbl_user.mscID
 FROM
   tbl_master, 
   tbl_user
 WHERE
   tbl_master.active = 1 AND tbl_master.MSCUnit = tbl_user.mscID

tbl_msc.mscID中存储的值是varchar(11),其中包含类似于A00或A19的字符串。这也是表中的主键。

tbl_user.mscID中存储的值与tbl_msc.mscID中的值匹配。存储在tbl_master.UnitMSC中的值也与tbl_msc.mscID的值匹配。

我的目标是从tbl_master返回所有记录,其中当前登录的用户具有相同的mscID。我遇到的问题是该语句返回tbl_master中的所有记录。

我尝试了几种不同的join语句,由于某种原因,我无法使其正确过滤。

我缺少一些东西。对SQL语句的任何帮助将不胜感激。

谢谢, 会

2 个答案:

答案 0 :(得分:0)

您应该使用join s来编写。我不知道您怎么知道当前用户是谁,但我们的想法是将三个表连接在一起:

SELECT m.ID, m.name, m.training_date, m.MSCUnit, m.active, 
       u.mscID
FROM tbl_master m JOIN
     tbl_user u
     ON m.MSCUnit = u.mscID JOIN
     tbl_msc msc
     ON msc.mscID = u.msc_ID
WHERE m.active = 1 AND msc.mscName = ?;

请注意使用正确的,明确的,标准 JOIN语法和表别名。

答案 1 :(得分:-1)

Select a.*, b.userid from 
table_master a, table_user b where 
a.mscunit in (select mscid from 
table_user where active=1)

这应该为您指明正确的方向。