当前位置: 首页 > 知识库问答 >
问题:

mysql - 如何查询A表中非正常的名称列表?

仉成益
2024-03-28

A表字段:id,name
B表字段:id,a_id(A表id),status(0.正常,1禁用)
A表B表是一对多关系

要求:查出来A表中非正常的名称(name)列表

A表id在B表中禁用或不存在的关联的数据都属于不正常

共有2个答案

轩辕炎彬
2024-03-28
SELECT A.id, A.nameFROM AWHERE NOT EXISTS (SELECT 1 FROM B WHERE B.a_id = A.id)UNION ALLSELECT A.id, A.nameFROM AJOIN B ON A.id = B.a_idWHERE B.status = 1;
闾丘冠玉
2024-03-28

要查询A表中非正常的名称列表,你可以使用SQL的LEFT JOINWHERE子句来实现。这里是一个可能的查询语句:

SELECT A.nameFROM ALEFT JOIN B ON A.id = B.a_idWHERE B.status = 1 OR B.a_id IS NULL;

这个查询的逻辑是这样的:

  1. 使用LEFT JOIN将A表和B表连接起来,连接条件是A表的id等于B表的a_idLEFT JOIN会保留A表中的所有记录,即使B表中没有匹配的记录。
  2. WHERE子句中,我们检查两种情况:

    • B.status = 1:B表中与A表记录关联的status字段为1,表示该记录是非正常的(禁用状态)。
    • B.a_id IS NULL:B表中没有与A表记录关联的记录,即A表的记录在B表中不存在。这种情况也属于不正常。
  3. 查询的结果将只包含A表中非正常的名称(name字段)。

注意:这个查询假设B.status字段的值只有0和1,其中0表示正常,1表示禁用。如果status字段的值可能有其他含义,你可能需要调整查询条件来适应你的具体情况。

 类似资料:
  • 问题内容: 为什么简单地更新此表以添加列需要一个多小时?该表有1500万行。它具有2个索引和一个键主键。ALTER TABLE查询现在已处于“复制到tmp表”状态1小时15分钟。 表: 问题答案: 对于非常大的表,MySQL的ALTER TABLE性能可能会成为问题。MySQL通过创建一个具有所需新结构的空表,将旧表中的所有数据插入新表中,然后删除旧表来执行大多数更改。这可能会花费很长的时间,特别

  • 问题内容: 我正在编写一些工具,当对它应用任何查询时,该工具必须检索检索到的数据集的列名。 如果您熟悉phpMyAdmin,您将意识到SQL窗格可以执行查询并显示结果以及列名。我想知道查询会有多困难,它总是产生列名,而幕后的编程实际上是什么?就像它会分析查询,然后从查询中查找表名称,然后首先使用查询检索列名称,然后再检索数据吗? 有什么更好的办法吗? 已更新 对不起,不完整的信息,我想我必须说我在

  • 问题内容: 实现目标: 我想要名称属性包含列表中任何单词的所有对象。 我有: 例如: 然后应返回具有该名称的对象,因为word2在列表中。 请帮忙! 问题答案: 您可以使用对象来构造如下查询: 编辑: 是一种奇特的写作方式 您还可以使用显式的for循环来构造对象。

  • 问题内容: 有没有办法在mysql中获取表的列名?使用PHP 问题答案: 您可以使用DESCRIBE: 或者,在较新的版本中,您可以使用INFORMATION_SCHEMA: 或者您可以使用SHOW COLUMNS:

  • 问题内容: 是否有一种快速的方法可以从中的所有表获取所有列名,而不必列出所有表? 问题答案:

  • 本文向大家介绍mysql中如何使用正则表达式查询,包括了mysql中如何使用正则表达式查询的使用技巧和注意事项,需要的朋友参考一下 基本形式 属性名 regexp ‘匹配方式' 正则表达式的模式字符 ^ 匹配字符开始的部分 eg1: 从info表name字段中查询以L开头的记录 select * from info where name regexp '^L'; eg2: 从info表name字段