mysql - 从mysql中的两个表中获取数据

标签 mysql join

我有两个表 tblteacher 和 tblattendance 有共同的 tshortname 字段。现在我想显示 tblteacher 的 tshortname 和状态为"is",如果在 tblattendance 中的特定日期我在 tblattendance 中也有 tshortname 否则状态应该是“否”

select distinct(tblteacher.teachername),tblteacher.tshortname,
if(strcmp(tblteacher.tshortname,tblattendance.tshortname) and tblattendance.attdate='2013-07-01','no','yes') as status 
from tblteacher,tblclass,tblattendance

这是我执行上述查询时显示的数据

enter image description here

date-'2013-07-01' 显示的数据对某些老师来说是正确的。我不知道问题出在哪里。请帮我解决这个问题

更新:

select distinct(tblteacher.tshortname),if (tblteacher.tshortname not in(SELECT  
distinct(t.tshortname) from tblteacher t left join tblattendance a on t.tshortname=a.tshortname 
where a.attdate='2013-07-03'),'no','yes') as status from tblteacher;

enter image description here

现在我总是根据出勤表中的日期得到 42 行和正确的状态

最佳答案

这里是表之间的经典笛卡尔连接。

你需要像这样告诉数据库如何匹配各个表中的数据:

select distinct 
    (tblteacher.teachername),tblteacher.tshortname,
    if(strcmp(tblteacher.tshortname,tblattendance.tshortname) and tblattendance.attdate='2013-07-01','no','yes') as status 
from 
    tblteacher
        join tblclass
            on tblteacher.tshortname=tblattendance.tshortname
        join tblattendance
            on tblteacher.tshortname=tblattendance.teacherShortName

在您的情况下,strcpm 将处理前两个表中的连接,但会将其与第三个表中的所有行匹配——这就是您出错的地方。

编辑:根据您的评论,这可能更适合您按预期获取所有行。

select distinct 
    (tblteacher.teachername),tblteacher.tshortname,
    if(strcmp(tblteacher.tshortname,tblattendance.tshortname) and tblattendance.attdate='2013-07-01','no','yes') as status 
from 
    tblteacher
        left outer join tblclass
            on tblteacher.tshortname=tblattendance.tshortname
        left outer join tblattendance
            on tblteacher.tshortname=tblattendance.teacherShortName

关于mysql - 从mysql中的两个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18636086/

相关文章:

mysql - 为什么我不能删除 MySql 表上的这个外键约束?

mysql - 如何选择每行都有分区名称的一堆行?

sql - SQL-兴趣之间的计算重叠

mysql - 按一列的总和与另一列的一般值进行错误分组

sql - 如何在 MySQL 中连接具有不同行数的两个表?

mysql - 总结初始列 mysql

php - 如何使用 PHP 仅显示一次从数据库调用的图像

mysql - 需要帮助从三个不同的表中获取结果

php - 如何将原始 SQL 查询转换为 Silverstripe SQLQuery 抽象层

Mysql Distinct Join 记录不匹配或根本没有连接数据