MYSQL 中的 CASE 表达式可以实现吗?

发布于 2024-11-02 02:46:40 字数 362 浏览 1 评论 0原文

我读到的有关使用 CASE 的所有内容都意味着只能更改它引用的列中各个字段的内容。有没有办法引用另一个表中的字段?

我想要的不是(只是使用互联网上的随机示例)

SELECT daysName,
       CASE daysName 
         WHEN "Sunday" THEN "Holiday" 

CASE table1.column1   
  WHEN table3.column1 = "Yes" THEN table1.column1 + 80

如果没有,我该怎么做?

这些表有主键和外键,因此我可以使用联接。

Everything I've read about using CASE implies that it's only possible to change the contents of the individual field within the column it references. Is there a way to reference a field within another table?

Instead of (just to use a random example from the internet)

SELECT daysName,
       CASE daysName 
         WHEN "Sunday" THEN "Holiday" 

I want something like:

CASE table1.column1   
  WHEN table3.column1 = "Yes" THEN table1.column1 + 80

If not, how do I do this?

These tables have primary and foreign keys so I am able to use joins.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

欲拥i 2024-11-09 02:46:40

看起来您可以将 case 表达式转换为

CASE table3.column1
  WHEN 'Yes' THEN (table1.column1 + 80)
  ELSE table1.column1
END

或者,您可以使用 IF

table1.column1 + IF(table3.column1 = 'Yes', 80, 0)

当然,无论哪种方式,您都需要加入 table3 ,并且您可能希望为该值指定一个别名,因为它不再是严格意义上的数据库中的字段。 (MySQL 将返回整个表达式作为列名。)

It looks like you could turn the case expression into

CASE table3.column1
  WHEN 'Yes' THEN (table1.column1 + 80)
  ELSE table1.column1
END

Or, you could use IF:

table1.column1 + IF(table3.column1 = 'Yes', 80, 0)

You'll need to join table3 either way, of course, and you might want to give that value an alias, since it's no longer strictly a field in the DB. (MySQL will return that whole expression as the column name.)

为人所爱 2024-11-09 02:46:40

这:

CASE table1.column1   
  WHEN table3.column1 = "Yes" THEN table1.column1 + 80

...如果尝试对 CASE 表达式使用这两个语法选项,则应返回语法错误。如果没有更多信息,它应该是:

CASE 
  WHEN table3.column1 = "Yes" THEN table1.column1 + 80

..因为示例中没有任何内容表明您正在使用 table1.column1 进行评估。

接下来 - 要使用 table3.column 比较,您需要一个联接。这可以是 INNER 或 OUTER JOIN,可能是笛卡尔积(CROSS JOIN)...但是您没有提供有关表之间关系的信息。

This:

CASE table1.column1   
  WHEN table3.column1 = "Yes" THEN table1.column1 + 80

...should return a syntax error for attempting to use both syntax options for a CASE expression. Without more information, it should be:

CASE 
  WHEN table3.column1 = "Yes" THEN table1.column1 + 80

..because there's nothing in the example to say you're using the table1.column1 for evaluation.

Next - to use the table3.column comparison, you need a join. That can be an INNER or OUTER JOIN, possibly a cartesian product (CROSS JOIN)... but you haven't provided information about what the relationship between the tables is.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文