SQL:SELECT表和包含来自另一个表

时间:2018-05-08 09:01:47

标签: 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         |
|---------------------|------------------|------------------|

结果&lt; - 这就是我想要实现的目标

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

问候, 帧

3 个答案:

答案 0 :(得分:1)

如果您使用JOIN

,则无需再次subquery
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;

答案 1 :(得分:0)

尝试此查询:

SELECT
    t1.Foo,
    t1.Bar,
    t2.Baz AS value1
FROM table1 t1
INNER JOIN table2 t2
    ON t1.Foo = t2.Foo
WHERE
    t2.Qux = 'A';

答案 2 :(得分:0)

您可以使用SELECT DISTINCT语句

SELECT DISTINCT table1.Foo, table1.Bar, (SELECT table2.Baz from table2 WHERE table1.Foo = table2.Foo and table2.Qux = 'A') As value1 FROM table1 INNER JOIN table2 WHERE table1.Foo = table2.Foo AND table1.Bar = '2'