SQL: ВЫБЕРИТЕ таблицу и включите поле / значение из другой таблицы - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы выбрать разные значения из одной таблицы и включить значение поля (которое будет выбрано из другой таблицы) из другой таблицы.

Вот пример моего утверждения:

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'

Очень важно, чтобы значение1 было отдельным значением.Выдается ошибка, что подзапрос (со значением 1) содержит более одного значения.

Я хотел бы попросить вас о помощи!

Редактировать: вот некоторые примеры данных

table1

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

table2

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

Результат <- это то, чего я хотел бы достичь </p>

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

Привет, Рамка

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Вы можете использовать оператор 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'

0 голосов
/ 08 мая 2018

Вам не нужно делать JOIN снова, если вы используете subquery:

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

Вместо TOP используйте предложение LIMIT, если оно не поддерживается.

Вы можете реализовать предложение 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;
0 голосов
/ 08 мая 2018

Попробуйте этот запрос:

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';
...