我正在使用3个表,并且需要进行查询以根据第二个表中单个列的值从一个表返回数据。
tbl_user
tbl_master
tbl_msc
我当前的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语句的任何帮助将不胜感激。
谢谢, 会
答案 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)
这应该为您指明正确的方向。