Mysql union / join help с несколькими столбцами - PullRequest
1 голос
/ 15 июля 2011

Сначала я подумал, что это может работать как объединение, но я не уверен, действительно ли это команда объединения или, если вообще возможно.Ниже приведен пример двух таблиц, каждая из которых содержит около 20 столбцов различных данных.

Таблица 1

>     id    assembly    user1    user2    containerID    productID    packageID
      1     line2       Billy    John     3794           4892         4589
      2     line4       John     Doug     7794           6201         7864

Таблица 2

>     item_id    name    width    height    weight    flag1    flag2
      3794       Box     10       10        10        0        1
      4892       Lamp    4        6         2         1        1
      7864       BigBox  200      200       300       4        5      

То, что я пытаюсь сделать, это показать всю таблицу 1, но замените containerID, productID и packageID их именем из таблицы 2, используя соответствующий item_id.Попытался сделать это вне mysql с помощью foreach, но с таблицей 2, имеющей 30 тыс. Строк, он «чуть-чуть» отстает при попытке отобразить сотни строк из таблицы 1 и заменить каждый идентификатор на его эквивалентное имя.

Ответы [ 3 ]

3 голосов
/ 15 июля 2011

Чтобы просмотреть все записи таблицы_1, используйте:

   SELECT t1.id, t1.assembly, t1.user1, t1.user2, 
          t2c.name, t2pr.name, t2pk.name
     FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2c ON t2c.item_id = t1.containerid
LEFT JOIN TABLE_2 t2pr ON t2pr.item_id = t1.productid
LEFT JOIN TABLE_2 t2pk ON t2pk.item_id = t1.packageid

Вы можете изменить их на ВНУТРЕННИЕ СОЕДИНЕНИЯ, но любая строка, которая не соответствует всем трем, не будет в наборе результатов.1005 * В моем запросе используются псевдонимы таблиц, поскольку вам нужно присоединиться к соответствующему столбцу TABLE_2 для каждого name, который вы хотите найти.

2 голосов
/ 15 июля 2011

попробуйте использовать что-то вроде этого:

  SELECT id, assembly, user1, user2, 
         (SELECT name from table2 where item_id = table1.containerID), 
         (SELECT name from table2 where item_id = table1.productID), 
         (SELECT name from table2 where item_id = table1.packageID)
    FROM table1 
ORDER BY id;
0 голосов
/ 15 июля 2011

Вам нужно будет присоединиться к каждой строке три раза для каждого item_id

   SELECT t1.*, t21.name,t22.name,t23.name FROM table_1 t1
       INNER JOIN table_2 t21 ON t1.containerID = t21.itemid
       INNER JOIN table_2 t22 ON t1.productId = t22.itemid
       INNER JOIN table_2 t23 ON t1.packageID = t23.itemid

Убедитесь, что в itemid таблицы_2 есть индекс

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