【问题标题】:return values of table 1 based on single column in table 2根据表 2 中的单列返回表 1 的值
【发布时间】:2018-08-05 23:53:04
【问题描述】:

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

  • tbl_user

    • 身份证
    • 登录
    • 通过
    • 有效
    • mscID
  • tbl_master

    • 身份证
    • 姓名
    • 培训日期
    • MSCUnit
    • 活动
  • tbl_msc

    • mscID
    • 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 中的所有记录。

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

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

谢谢, 会

【问题讨论】:

标签: mysql sql


【解决方案1】:

您应该使用joins 编写此内容。我不知道你怎么知道当前用户是谁,但想法是将三个表连接在一起:

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 语法和表别名的使用。

【讨论】:

  • 这可能是我缺少的步骤。我假设由于用户登录系统,该表将知道活动用户。我想我需要找到一种方法来检查当前登录的用户。
【解决方案2】:
Select a.*, b.userid from 
table_master a, table_user b where 
a.mscunit in (select mscid from 
table_user where active=1)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2020-06-09
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多