mysql - MySQL Query 显示附加查询信息
问题描述
我在数据库中有两个表:
CREATE TABLE PAR (
A varchar(10) not null,
T varchar(25) not null,
U varchar(25) not null,
V varchar(30) not null,
primary key (A),
);
INSERT INTO PAR (A, T, U, V)
VALUES
('A5065','Choco','Belt','Texas'),
('B6060','Koro','Tan','Montana'),
('C2036','Beta','Blast','Washington'),
('D2000','Tao','Bet','Kentucky');
CREATE TABLE AT (
A varchar(10) not null,
B char(1),
C integer,
D varchar(20),
primary key (A),
foreign key (A) references PAR(A)
);
INSERT INTO AT (A, B, C, D)
VALUES
('A5065','Z','1660','Apple'),
('B6060','D','1598','Banana');
我想编写一个查询来查找表 AT 中的最高和最低 C 值
所需的输出如下所示:
Choco Belt 1660
Koro Tan 1598
我写了一个查询,但不幸的是它只返回:(没有 1660 和 1598 值的第二列)
Choco Belt
Koro Tan
我的查询是:
SELECT CONCAT(T,' ', U) AS 'Names' from PAR
WHERE A IN ( SELECT A from AT where (C IN (SELECT MIN(C) from AT) || C IN (SELECT MAX(C) from AT)));
解决方案
您需要在选择列表中指定第二列,这意味着您必须有一个表可以在外部查询中引用。所以使用JOIN
而不是IN(subquery)
:
SELECT CONCAT(T,' ', U) AS 'Names', AT.C
FROM PAR
JOIN AT USING (A)
WHERE AT.C IN (SELECT MIN(C) from AT) OR AT.C IN (SELECT MAX(C) from AT)
输出:
+------------+------+
| Names | C |
+------------+------+
| Choco Belt | 1660 |
| Koro Tan | 1598 |
+------------+------+
提示:使用OR
instead of||
表示逻辑 OR,因为||
可能意味着字符串连接取决于您的 SQL 模式。
推荐阅读
- c# - 组合框在多个字段上显示成员
- javascript - 闭包和解构——解构函数不能互相调用?
- python - 错误:未找到“登录”。“登录”不是有效的视图函数或模式名称
- java - 如何使用 Java 中另一个类的构造函数初始化 2D 数组?
- android - Renderscript:加载 ScriptC 脚本失败
- amazon-web-services - CloudFront + Amazon WAF 与另一台主机
- php - 如何获取 client_max_body_size (nginx - php-fpm) 作为 PHP 中的值?
- xml - 如何使用 XML::LibXML 返回单独的结果
- html - 网页中的声音输入
- azure-devops - 从 VSTS 压缩部署到 Azure Functions v2 后,DurableTask 未注册