SQL:选择表并包含另一个表中的字段/值

标签 sql join subquery inner-join

我想要完成的是从一个表中选择不同的值,并包含另一个表中的字段值(将从另一个表中选择)。

这是我的声明的示例:

SELECT table1.Foo, <- ID
       table1.Bar, <- some value
       (SELECT table2.Baz from table2 <- another value I'd like to select from another table
        WHERE table1.Foo = table2.Foo and table2.Qux = 'A') As value1
FROM table1
INNER JOIN table2 ON table1.Foo = table2.Foo
WHERE table1.Bar = '2'

value1 是一个独特的值,这一点非常重要。抛出的错误是子查询(value1)包含多个值。

恳请您的帮助!

编辑:这是一些示例数据

表1

|---------------------|------------------|
|         Foo         |       Bar        |
|---------------------|------------------|
|          1          |        ABC       |
|---------------------|------------------|
|          2          |        XYZ       |
|---------------------|------------------|

表2

|---------------------|------------------|------------------|
|         Foo         |        Baz       |       Qux        |
|---------------------|------------------|------------------|
|          1          |        100       |        A         |
|---------------------|------------------|------------------|
|          1          |        200       |        B         |
|---------------------|------------------|------------------|
|          2          |        150       |        A         |
|---------------------|------------------|------------------|
|          2          |        175       |        B         |
|---------------------|------------------|------------------|

结果<-这就是我想要实现的目标

|---------------------|------------------|------------------|
|         Foo         |        Bar       |       value1     |
|---------------------|------------------|------------------|
|          1          |        ABC       |        100       |
|---------------------|------------------|------------------|
|          2          |        XYZ       |        150       |
|---------------------|------------------|------------------|

您好, 框架

最佳答案

如果您使用子查询,则无需再次执行JOIN:

select *,
       (select top 1 Baz from table2 where Foo = t1.Foo and Qux = 'A') as value1
from table1 t1;

如果不支持,请使用LIMIT子句代替TOP

您可以将 LIMIT 子句实现为

select *,
        (select Baz 
         from table2 
         where Foo = t1.Foo and 
               Qux = 'A' 
         order by Baz -- Use DESC if necessary 
         LIMIT 1) as value1
from table1 t1;

关于SQL:选择表并包含另一个表中的字段/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50229837/

相关文章:

用于保留更改历史记录的 SQL 模式模式

mysql - 如何获取MySQL存储过程的执行历史记录

sql - 如何在第二个查询中使用第一个查询的结果?

php - 奇怪的 Laravel 错误(从范围加入)错误的 ID 列

mysql - 回答了,但是为什么呢? Mysql 第一个查询运行第二个不需要理解为什么?

sql - 为每个用户选择最大记录

mysql - 计算不同日期 MySQL 返回一行

mysql - 如何在 mySQL 中对动态生成的特定顺序进行排序?

python - Pandas 等价于 SQL CROSS JOIN(笛卡尔积)

mysql - 对查询中的多个 IF 求和