基于 Mysql Case 语句将一张表连接到另一张表

2024-02-12

我有一张桌子叫PublicForum4 个不同的用户可以发布到,在这个表上我有 2 个字段称为AuthorId(int) and AuthorType(Enum)显示用户 ID 以及哪个用户撰写了该帖子。

现在我想选择全部PublicForum根据以下条件连接 4 个表中的 1 个AuthorType.

我尝试使用下面的代码通过 Case 语句执行此操作,但其他 3 个表返回 NULL 值,我只想要与 AuthorType 匹配的表。

SELECT PublicForum.*, (SELECT COUNT(*) FROM PublicForumComment WHERE PublicForumComment.ForumId = PublicForum.ForumId) AS CommentCount, 
Student.*, Parent.*, Teacher.*, Counsellor.* FROM PublicForum 
LEFT JOIN Student ON (CASE WHEN PublicForum.AuthorType='Student' AND PublicForum.AuthorId = Student.StudentId THEN 1 ELSE 0 END = 1) 
LEFT JOIN Parent ON (CASE WHEN PublicForum.AuthorType='Parent' AND PublicForum.AuthorId = Parent.ParentId THEN 1 ELSE 0 END = 1) 
LEFT JOIN Teacher ON (CASE WHEN PublicForum.AuthorType='Teacher' AND PublicForum.AuthorId = Teacher.TeacherId THEN 1 ELSE 0 END = 1) 
LEFT JOIN Counsellor ON (CASE WHEN PublicForum.AuthorType='Counsellor' AND PublicForum.AuthorId = Counsellor.CounsellorId THEN 1 ELSE 0 END = 1) 
ORDER BY PublicForum.ForumId DESC LIMIT 10

还有其他方法可以实现这一目标吗?


您不能有条件地加入。执行此操作的方法是使用单独的查询组合起来UNION.

SELECT t1.*, COUNT(pfc.ForumId) AS pfc_count
FROM (
    SELECT p.*, s.StudentName AS Name, s.StudentCol2 AS Col2, s.StudentCol3 AS Col3, s.StudentCol4 AS Col4
    FROM PublicForum AS p
    JOIN Student AS s ON p.AuthorId = s.StudentId
    WHERE p.AuthorType = 'Student'
    UNION
    SELECT p.*, pa.*
    FROM PublicForum AS p
    JOIN Parent AS pa ON p.AuthorId = pa.ParentId
    WHERE p.AuthorType = 'Parent'
    UNION
    SELECT p.*, t.*
    FROM PublicForum AS p
    JOIN Teacher AS t ON p.AuthorId = t.TeacherId
    WHERE p.AuthorType = 'Teacher'
    UNION
    SELECT p.*, c.*
    FROM PublicForum AS p
    JOIN Counsellor AS c ON p.AuthorId = c.CounsellorId
    WHERE p.AuthorType = 'Counsellor') AS t1
LEFT JOIN PublicForumComments AS pfc ON t1.ForumId = pfc.ForumId
GROUP BY t1.ForumId
ORDER BY t1.ForumId DESC
LIMIT 10

指某东西的用途tablename.*因为所有连接的表取决于它们具有相同的列数,并且所有列都是类似的并且顺序相同。这AS然后第一个子查询中的子句为来自UNION.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 Mysql Case 语句将一张表连接到另一张表 的相关文章

  • PHP Microsoft Excel 文件生成/导出类

    我一直在寻找一个好的 Excel 文件生成类 但还没有找到 我的首要问题是 虽然我可以在 Excel 中打开导出的文件 运行 2007 年 但我总是收到一条警告 文件的格式与文件扩展名不同 我注意到 phpMyAdmin 中的 Excel
  • MySQL JDBC 连接上的故障转移?

    我正在尝试确定如何使用 MySQL JDBC 驱动程序实现高可用性解决方案 似乎有一个我可以设置的故障转移属性 但我想知道当使用 MySQL 和 JDBC 实现简单的故障转移机制时 人们倾向于使用什么 我们计划将 2 个前端 Tomcat
  • 当我使用 IS NOT NULL 时无法创建 MySQL TRIGGER

    CREATE TRIGGER b I O AFTER UPDATE ON book FOR EACH ROW BEGIN IF OLD status IS NOT NULL AND NEW status IS NOT NULL AND NE
  • 将mysql数据导入kubernetes pod

    有谁知道如何将我的 dump sql 文件中的数据导入到 kubernetes pod 中 直接 与处理 docker 容器的方式相同 docker exec i container name mysql uroot password se
  • Mysql启动问题|错误!服务器退出而不更新PID文件

    有任何想法吗 Joshs MacBook Pro cdwhp joshc mysql server start Starting MySQL ERROR The server quit without updating PID file u
  • 检查字段是否为空

    如果我想检查该字段是否有除 null 和空之外的其他字符 查询是否正确 select CASE WHEN description IS NULL THEN null WHEN description IS NOT NULL THEN not
  • 当按第三个分组时,MySQL 根据另一个字段的最小值更新字段

    我已经阅读了几个关于选择最小值 分组等的线程 但似乎无法创建有效的查询来解决这个问题 如有重复 敬请原谅 我有一个像这样的表 ID Date Value Tag 1 1 1 13 500 NULL 2 1 1 13 10 NULL 3 1
  • 在 PHP / MySQL 中处理未读帖子

    对于个人项目 我需要使用 PHP 和 MySQL 构建一个论坛 我不可能使用已经构建的论坛包 例如phpBB 我目前正在研究构建此类应用程序所需的逻辑 但这已经是漫长的一天了 我正在努力解决为用户处理未读帖子的概念 我的一个解决方案是有一个
  • 如何在SQL中编写连接查询[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 问题 给定 Employee 和 AnnualReviews 表 编写一个查询以返回所有从未接受过按 HireDate 排序的评论的员
  • 如何修复损坏的 xampp 'mysql.user' 表?

    我昨天使用 Xampp 创建了一些简单的基于 Web 的实用工具 今天我想继续研究它 但 xampp 控制面板给了我一些奇怪的错误 这是 MySQL 错误日志 2019 07 20 23 47 13 0 Note InnoDB Uses e
  • MySQL中的字符串分割函数

    谁能告诉我如何在 mysql 中实现 split 函数 其行为类似于 Javascript split 我想要一个这样的功能 SELECT Split a b c d AS splitted 结果如下 splitted a b c d 有谁
  • MYSQL sum() 计算不同的行

    我正在寻求在 SQL 查询中使用 sum 的帮助 SELECT links id count DISTINCT stats id as clicks count DISTINCT conversions id as conversions
  • 是否可以在MySQL UDF中的IF条件中声明游标

    我可以在 if 语句中声明游标吗 如果可能的话我怎样才能做到 因为我刚刚做了这样的光标 CREATE FUNCTION fn test ProductID BIGINT 20 RETURNS DECIMAL 10 2 BEGIN DECLA
  • 与 6 位随机字母数字代码发生冲突的概率是多少?

    我使用以下 Perl 代码生成随机字母数字字符串 仅限大写字母和数字 用作 MySQL 数据库中记录的唯一标识符 数据库的行数可能会保持在 1 000 000 行以下 但实际的绝对最大值约为 3 000 000 行 我是否有 2 条记录具有
  • #1214 - 使用的表类型不支持 FULLTEXT 索引

    我收到一条错误消息 指出该表类型不支持 FULLTEXT 索引 我怎样才能实现这个目标 这是我的桌子 CREATE TABLE gamemech chat id bigint 20 unsigned NOT NULL auto increm
  • LEFT JOIN 返回与 INNER JOIN 相同的结果

    我有一张桌子 磨砂膏 里面有 1600 个独特的物品 第二张桌子有100万以上 我运行 INNER JOIN 并获得 65 个匹配项 SELECT a BW Parent Number a Vendor Name b Parent Supp
  • 将数据从 javascript 发送到 mysql 数据库

    我有这个小点击计数器 我想将每次点击都包含在 mysql 表中 有人可以帮忙吗 var count1 0 function countClicks1 count1 count1 1 document getElementById p1 in
  • MySQL 性能 DELETE 或 UPDATE?

    我有一个超过 10 7 行的 MyISAM 表 向其中添加数据时 我必须在最后更新 10 行 删除它们然后插入新行更快 还是更新这些行更快 应更新的数据不是索引的一部分 索引 数据碎片怎么样 UPDATE到目前为止要快得多 当你UPDATE
  • mysql查询先慢后快

    我有 2 个 myISAM 表 分别称为 tests 和 completed tests 一个有 170 个条目 另一个有 118k 条目 当我运行此查询时 SELECT ct archive ct status ct score ct u
  • 在旧版本的 MySQL (<5.5.0) 中模拟 TO_SECONDS()

    出于性能和简单性的原因 我想以秒的形式获取 MySQL 3 x 服务器中 DATETIME 列的内容 或者实际上任何数字类型 我只是想在使用 UNIX TIMESTAMP 时避免所有明显的时区问题 the我表中的日期确实来自不同的区域设置

随机推荐

  • 如何使用 Spark Naive Bayes 分类器通过 IDF 进行文本分类?

    我想使用 tf idf 将文本文档转换为特征向量 然后训练朴素贝叶斯算法对它们进行分类 我可以轻松加载没有标签的文本文件 并使用 HashingTF 将其转换为向量 然后使用 IDF 根据单词的重要性对单词进行加权 但如果我这样做 我就会去
  • 如何将参数样条线一分为二?

    我有一个分段参数埃尔米特三次样条 对于样条线的每一段 公式为 Q 2u 3 3u 2 1 p i 2u 3 3u 2 p i 1 u 3 2u 2 u tan i u 3 u 2 tan i 1 其中 u 是 0 1 域中每个部分的参数 每
  • PHP 正则表达式查找非空格字母

    我想替换 F 但不是 F 我尝试过以下代码 但没有任何运气 preg replace F f str 尝试这个 preg replace
  • Thread对象和Worker对象有什么区别(php pthreads)

    到目前为止我找到的唯一解释是 http pthreads org http pthreads org 但这对于代码来说意味着什么呢 我什么时候应该使用 Worker s 什么地方应该使用 Threads Thanks 它们都是线程 但是 线
  • 将 Unicode 输出到控制台的最佳方法是什么?

    我正在 Visual Studio 2019 中使用 C 17 我已经阅读了一些有关编码的内容 但我仍然对它们不太满意 我想将 UNICODE 字符输出到屏幕 为此 我使用以下代码 include
  • VB.NET 中的 Windows 窗体控件何时何地调用 InitializeComponent?

    我正在 VB NET 中做一个 Windows 窗体项目 但 VB NET 对我来说是全新的 我主要是一名 C 开发人员 在 C Windows 窗体中 从窗体 控件的构造函数调用用户控件的 InitializeComponent 当我在
  • 为您的网站提取 LinkedIn 推荐

    如何提取或获取针对我的网站的 LinkedIn 推荐 有没有插件或者PHP脚本 您可以使用以下方法提取建议领英 API https developer linkedin com apis 具体来说配置文件API https develope
  • 尝试让机器人在使用命令时记录一些内容discord.py

    我试图让我的机器人在使用时记录一个事件 也称为 mod 命令 由于我的机器人位于多个服务器中 因此我有一个命令 人们可以在其中设置他们希望机器人记录事件的日志通道 到目前为止 我已经 commands command commands ha
  • 当键未知时从字典中删除项目

    按值从字典中删除项目的最佳方法是什么 即当项目的键未知时 这是一个简单的方法 for key item in some dict items if item is item to remove del some dict key 还有更好的
  • mongodb聚合嵌入文档值

    我正在努力解决 mongodb 中的一些聚合函数 假设我有一些这样的文件 id 1 periods id 12 tables id 121 rows id 1211 text some text id 1212 text some othe
  • css、javascript——从哪里开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是一名拥有 10 多年经验的 C C 程序员 我还了解 python 和 perl 但我从未使用过这
  • 正则表达式模式匹配字符串中至少 1 个数字和 1 个字符

    我有一个正则表达式 a zA Z0 9 这只允许输入字母数字 但如果我只插入数字或字符 那么它也接受它 我希望它的工作方式就像字段应该只接受字母数字值 但该值必须至少包含 1 个字符和 1 个数字 为什么不首先应用整个测试 然后添加针对字符
  • 以编程方式设置 UIButton 的背景不起作用

    我只是想简单地设置按钮的背景图像 但无论我尝试什么 它都什么也没做 我还放了一个UIImageView在那里查看图像文件是否有任何问题 但图像视图设置得很好 我必须在按钮的属性中设置一些东西吗 这里是代码 import UIKit clas
  • 如何让不同的解决方案引用同一个resx文件?

    我有一个 resx 文件 我想从多个解决方案 项目中使用它 并且我不想在每个解决方案中都有本地副本 仅在编译时带一份副本 有什么办法可以做到这一点吗 因为当我将其添加为 添加现有文件 时 它会在本地复制一份副本 知道该怎么做吗 如果您使用的
  • 为 iOS 构建 GMP

    我需要使用GMP在我正在开发的 iPhone 程序中 但真的不知道从哪里开始 我知道我必须为设备构建一个版本 为模拟器构建一个版本 但这就是我所知道的 我尝试环顾四周 但没能找到太多东西 这里有人成功构建吗GMP for iphone愿意指
  • 如何在 swing 中淡入淡出图像?

    我有一个继承自 JPanel 的类 上面有一个图像 我想设置一个小动画来显示面板 图像 然后在事件触发时将其淡出 我大概设置了一个线程并启动动画 但是我该如何真正做到淡入淡出呢 您可以自己进行线程处理 但使用Trident http ken
  • Rcpp 中的折叠向量

    我有一个 Rcpp 函数 它给我一个结果列表 其中包含一些字符串向量 std vector 1 1 0 1 0 0 0 0 2 1 0 0 0 0 0 1 3 1 0 1 0 0 0 0 4 1 0 0 0 1 0 0 我想得到这样的东西
  • React (CRA) Service Worker 缓存“公共”文件夹

    执行 create react app 并启用 Service Worker 后index js 来自的所有相关文件src文件夹被缓存 然而我的一些资源位于public目录 当我跑步时npm run build the asset mani
  • 如何在 Django 中使用 toastr 来显示成功或失败消息

    我一直在使用 Django 消息框架来显示应用程序中的成功或失败消息 但我希望 UI 良好 所以我发现 toastr 是向用户显示消息的好方法 但我不知道如何使用它 请引导我完成这个过程 下面的函数将用户保存到数据库 当保存用户信息时会显示
  • 基于 Mysql Case 语句将一张表连接到另一张表

    我有一张桌子叫PublicForum4 个不同的用户可以发布到 在这个表上我有 2 个字段称为AuthorId int and AuthorType Enum 显示用户 ID 以及哪个用户撰写了该帖子 现在我想选择全部PublicForum