首页 > 解决方案 > 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)));

标签: mysqlsql

解决方案


您需要在选择列表中指定第二列,这意味着您必须有一个表可以在外部查询中引用。所以使用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 |
+------------+------+

提示:使用ORinstead of||表示逻辑 OR,因为||可能意味着字符串连接取决于您的 SQL 模式。


推荐阅读