首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mysql中的哪个位置从两个表中获取数据?

如何使用mysql中的哪个位置从两个表中获取数据?
EN

Stack Overflow用户
提问于 2014-04-08 07:54:04
回答 3查看 92关注 0票数 1

我在为一个医疗中心建一个数据库。在我的例子中,我需要使用两个表来获取数据。我有两个表,名为ConsultationChanneling。在我的情况下,当病人放置一个新的通道,它将自动添加到会诊表。然后,当病人进行咨询时,咨询记录就会被移除。但是Channeling记录并没有删除(根据业务案例)。我需要从Channeling记录中获取记录,即Consultation表中不存在。我试过用这个,

代码语言:javascript
复制
SELECT c.* FROM Channeling c, Consultation cn WHERE c.cid!=cn.cid

cidChanneling表的主键。它是Consultation的外键。当我使用这个查询时,我得到了700+记录。但是在我的Channelin表中只有75条记录。我怎么能这么做。有可能吗?我在使用mysql数据库。

提前谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-08 07:57:37

假设您的查询是由WHERE子句过滤的笛卡尔产品。所以这就像得到75 x Consultation records count记录,然后丢弃所有这些组合

代码语言:javascript
复制
c.cid=cn.cid

这就是为什么您获得的元素比Channelin多。

为了得到你想要的,你可以尝试:

代码语言:javascript
复制
SELECT c.* FROM Channeling c WHERE 0 = (SELECT COUNT(1) FROM Consultation cn WHERE cn.cid=c.cid);

或者:

代码语言:javascript
复制
SELECT c.* FROM Channeling c WHERE c.id NOT IN (SELECT DISTINCT cn.id FROM Consultation cn);

情况并不相同:

选择具有不同id的通道和咨询元素的所有组合

超过:

从渠道中选择所有不在协商中的要素

票数 0
EN

Stack Overflow用户

发布于 2014-04-08 07:58:45

您将选择每一个可能的协商和通道组合,然后过滤出具有相同ID的那些。

试着做这样的事情:

代码语言:javascript
复制
SELECT * FROM Channeling WHERE cid NOT IN (SELECT cid FROM Consultation)
票数 0
EN

Stack Overflow用户

发布于 2014-04-08 08:07:13

您正在执行两个表的笛卡儿积,然后选择具有条件c.cid=cn.cid的记录。您可以通过向左连接两个表来完成这一任务。这将返回所有通道记录,然后选择具有咨询Id列null的记录。像这样

代码语言:javascript
复制
SELECT  c.*
FROM Channeling c
LEFT JOIN Consultation cn
ON c.cid = cn.cid 
WHERE cn.cid IS NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22930885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档