gpt4 book ai didi

mysql - 即使条件不是我,也选择一些数据

转载 作者:行者123 更新时间:2023-11-29 19:03:26 24 4
gpt4 key购买 nike

我已经尝试解决这个问题有一段时间了——我正在进行模拟(用 PHP 运行,因为我讨厌自己)。我已经完成了可以开始添加“病毒”等内容的工作。

现在,我正在研究一种限制公民生育能力的“病毒”——除了确定他们是否“不育”的实际方法之外,我已经让一切都完美运行。

我正在尝试使用与此类似的查询从数据库中提取数据(注意此查询半工作,但我不知道如何使其正常工作):

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

我试图弄清楚是否有一种方法可以获取条件数据,如果公民没有被感染,它仍然会选择 GERT 信息,并为 VERT 返回 null,而不是根本不返回任何内容。

最佳答案

请尝试以下操作...

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;

该语句首先执行 INNER JOIN之间citizensgenetics基于它们的共同值 cid 。这有效地前置了 citizen 的字段给 genetics 的人对于每个 citizen .

然后它执行 LEFT JOIN在这个连接的数据集和病毒之间,其中 virus.vid = citizens.infected 。这具有附加 virus 字段值的效果。那一个citizen受此困扰 citizengenetics 中的每条记录为此citizen 。如果citizen不受 virus 的困扰,然后NULL值用于 virus字段。

然后将生成的数据集精炼为仅包含 citizens.cid 值的记录。是 1 .

如果您希望为所有人生成相同的列表 citizens ,然后删除 WHERE条款。

使用INNER JOINLEFT JOIN与使用 CROSS JOIN 相比,这是一种更现代、更高效的加入方式。由 WHERE 精制而成条款。一个CROSS JOIN两个表之间,使用 tblTable1, tblTable2 执行附加 tblTable2 中每条记录的副本到 tblTable 中的每条记录。然后通过 WHERE 细化生成的(通常非常大)数据集。条款。与INNER JOINLEFT JOIN仅那些满足 ON 的记录标准被加入,这通常要快得多。

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

关于mysql - 即使条件不是我,也选择一些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43690890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com