首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择一些数据,即使条件不是我

选择一些数据,即使条件不是我
EN

Stack Overflow用户
提问于 2017-04-29 01:21:15
回答 2查看 38关注 0票数 0

我已经尝试了一段时间了--我正在做一个模拟(用PHP运行,因为我讨厌自己)。我已经到了可以开始加入“病毒”之类的程度了。

现在,我正在研究一种限制公民生育能力的“病毒”--我已经把它做得很好了,除了找出他们是否“不育”的实际方法外。

我试图使用类似于此的查询从数据库中提取数据(注意到这个查询半工作,但我不知道如何使它正常工作):

代码语言:javascript
复制
SELECT g.infert1 as gert,
       v.infert1 as vert
FROM genetics as g,
     virus as v,
     citizens as c
WHERE c.cid = 1
  AND g.cid = c.cid
  AND v.vid = c.infected

GERT和Virus数据关联到两个表(遗传学和病毒)。病毒表包含与遗传学表(Imm00-12、infert1等)相同的大多数行。如果“公民”被感染,这两组数据都会正确选择,但是如果没有,则结果返回null并导致错误。

我试图找出是否有一种获得条件数据的方法,如果一个公民没有被感染,它仍然会选择GERT信息,只返回null,而不是返回任何东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-29 02:55:44

请试试看..。

代码语言:javascript
复制
SELECT genetics.infert1 AS gert,
       virus.infert1 AS vert
FROM citizens
JOIN genetics ON citizens.cid = genetics.cid
LEFT JOIN virus ON virus.vid = citizens.infected
WHERE citizens.cid = 1;

该语句首先根据citizensgenetics的公共值cid在它们之间执行cid。这有效地为每个citizen的字段加上了genetics字段。

然后,它在连接的数据集和virus.vid = citizens.infected所在的病毒之间执行一个virus.vid = citizens.infected。这样做的效果是将virus字段的值与该citizen的字段一起附加到来自genetics的该citizen的每个记录中。如果citizen不受virus影响,则对virus字段使用NULL值。

然后,将结果数据集细化为citizens.cid值为1的那些记录。

如果希望为所有citizens生成相同的列表,则删除WHERE子句。

使用INNER JOINLEFT JOIN是一种比使用WHERE子句细化的CROSS JOIN更现代和更有效的连接方式。使用tblTable1, tblTable2执行的两个表之间的CROSS JOIN将每个记录的副本从tblTable2附加到tblTable的每个记录。结果(通常是非常大的)数据集通过WHERE子句进行细化。对于INNER JOINLEFT JOIN,只有那些符合ON条件的记录才会被连接起来,这通常要快得多。

如果您有任何问题或意见,请随时发表相应的评论。

票数 0
EN

Stack Overflow用户

发布于 2017-04-29 02:29:45

这样的东西可能就是你想要的。

代码语言:javascript
复制
SELECT g.infert1 as gert,
       cv.vert as vert
FROM
    genetics as g
LEFT JOIN 
   ( SELECT c.cid as cid, v.infert1 as vert
      FROM virus as v
      INNER JOIN citizens as c ON v.vid = c.infected 
      WHERE c.cid = 1
      ) AS cv
        ON g.cid = cv.cid

在这里,我使用SQL语法:

  • 内连接意味着给出它们完全匹配的行。这就是您的原始SQL所做的,但我们只希望在病毒和公民之间进行这种操作。
  • 左联接的意思是“从左边的表中给我行,如果其他表中有行,那么也包括它们”--这就是我认为您想要的。

你可能希望重新评估公民是否只能感染一种病毒。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43690890

复制
相关文章

相似问题

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