gpt4 book ai didi

mysql - 从表中带回某条记录,除非存在类似的记录,在这种情况下带回那一条

转载 作者:行者123 更新时间:2023-11-29 05:20:01 25 4
gpt4 key购买 nike

假设我有一个表,有 3 条记录,[a]、[b]、[c]

我想返回 a, b, c,直到 d 被创建。 D 可以是 a、b 或 c 的重复,除了一列中的值:x 将不同。

注意:我的数据库是 MySQL,我的后端是 ColdFusion,当我说“用户编辑”或“用户看到列表”时,我的意思是用户看到的是要编辑的网页列表。如果您认为以编程方式完成工作比数据库完成工作更好,我将不胜感激。

所以我想要的是:

  • 用户看到 a,b,c 的列表。
  • 用户编辑c
  • c 被复制为 d,在 x 列中具有不同的值。
  • 用户看到 a,b,d 的列表。
  • 用户编辑b
  • b 被复制为 e,在 x 列中具有不同的值。
  • 用户看到 a,e,d 的列表。

等...

它似乎应该是 SELECT [fooRecord] UNLESS [barRecord exists] 的情况,在这种情况下带回 [barRecord]。我四处寻找类似的答案,有些确实使用了 EXISTS,但这似乎只返回 true 或 false 值,而不是我正在寻找的记录。我相信这是我需要的一个奇特的子查询或 INNER JOIN,但我无法想出执行它的确切语法。

这是我第一次在 SO 上发帖,所以如果我做错了其中的任何部分或者我的问题不清楚,我深表歉意,如果需要,我会提供清晰的信息或更多信息。非常感谢任何帮助。

最佳答案

您的架构似乎有点令人费解 - 可能是时候重新考虑一下了。通常问题是过度尝试避免额外的表或列 - 但这可能是将额外的元数据添加到模式以帮助提取此数据的情况。您也可以考虑简单地选择所有数据 (a、b、c、d、e),然后简单地使用 Q 的 Q 来根据 X 梳理出您想要的行。

与此同时,一条 CASE 语句可能会让您到达那里。这是完全未经测试的伪代码,但它可能会给你一个想法。

<Cfquery>
SELECT
CASE
WHEN x = *condition* THEN orig.col1
ELSE mod.col1
END CASE
AS col1,
CASE
WHEN x = *condition* THEN orig.col2
ELSE mod.col2
END CASE
AS col2
FROM tablename orig OUTER JOIN tablename mod
ON (orig.col1 = mod.col1
AND orig.col2 = mod.col2
AND orig.x <> orig.x)
</cfquery>

我想做的是将 2 个表连接在一起,并根据一个值是否存在来梳理出一个值与另一个值的对比。我不确定我是否完全理解这个查询,但你明白了。

另一种方法是 UNION - 像这样:

<Cfquery>
SELECT
col1, col2, col3
FROM tablename
WHERE *primarykey* NOT IN
(*select rows that DO have duplicates with modified x*)
UNION ALL
SELECT
col1, col2, col3
FROM tablename
WHERE *primarykey* IN
(*select rows that WITH the modified x*)
</cfquery>

这样做的好处是更容易理解。您可以处理一个查询,然后处理另一个查询,然后将它们连接在一起以获得您想要的结果。

祝你好运 - 似乎令人生畏 :)

关于mysql - 从表中带回某条记录,除非存在类似的记录,在这种情况下带回那一条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27150220/

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