получить данные из 2 таблиц, используя условия - PullRequest
1 голос
/ 01 апреля 2011

у меня 2 таблицы

+---------------------+
|       T_EQUIPMENT   |
+----+--------+---+---+
| ID | NAME   |APPROVED|
+----+--------+---+---+
| 01 | foo1   |  0    |
+----+--------+---+---+
| 02 | foo2   |  1    |
+----+--------+---+---+
| 03 | foo3   |  1    |
+----+--------+---+---+
| 04 | foo4   |  1    |
+----+--------+---+---+

+---------------------------+
|       T_HAS_EQUIPMENT     |
+----+------------+----+----+
| ID_CENTER | ID_EQUIP      |
+----+------------+----+----+
|     12    |      2        |
+----+------------+----+----+
|     3     |      3        | 
+----+------------+----+----+
|     3     |      2        |
+----+------------+----+----+
|     5     |      3        |
+----+-----------+----+----+
|     6     |      2        |
+----+------------+----+----+

Я хочу получить идентификатор, название утвержденного оборудования (УТВЕРЖДЕНО = 1), а также, есть ли у этого конкретного центра это оборудование

например для id_center = 3 я хочу это

    +---------------------+
    |       RESULT        |
    +----+--------+---+---+
    | ID | NAME   |  HAS  |
    +----+--------+---+---+
    | 02 | foo2   |  1    |
    +----+--------+---+---+
    | 03 | foo3   |  1    |
    +----+--------+---+---+
    | 04 | foo4   |  0    |
    +----+--------+---+---+

Итак, я забираю все оборудование и знаю, есть ли в центре это оборудование. Есть идеи?

1 Ответ

4 голосов
/ 01 апреля 2011

Использование:

   SELECT e.id, 
          e.name,
          CASE 
            WHEN he.id_center IS NOT NULL THEN 1 
            ELSE 0
          END AS has
     FROM T_EQUIPMENT e
LEFT JOIN T_HAS_EQUIPMENT he ON he.id_equip = e.id
                            AND he.id_center = 3
    WHERE e.approved = 1
 ORDER BY e.id

Размещение критериев фильтра в таблице с использованием соединения OUTER (LEFT, RIGHT) может кардинально изменить вывод.В этом примере id_center фильтруется до того, как производится JOIN.Если бы это было в предложении WHERE, фильтрация была бы применена позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...