Выбор альтернативной строки MySQL - PullRequest
0 голосов
/ 10 июля 2009

Допустим, у меня есть данные в двух таблицах. В одном у меня есть идентификатор заказа и дата заказа. В другой у меня есть идентификатор заказа, описание и стоимость. Я знаю, как делать простые SELECT, но что бы я использовал для вывода чего-то подобного?

Order ID | Order Date | Description                     | Value
1234     | 10/07/2009 |                                 |
         |            | Orderline description goes here | 53.49
         |            | Orderline description goes here | 25.63
         |            | Orderline description goes here | 21.64
12345    | 11/07/2009 |                                 |
         |            | Orderline description goes here | 12.37
         |            | Orderline description goes here | 13.86
         |            | Orderline description goes here | 17.79

Ответы [ 5 ]

4 голосов
/ 10 июля 2009

Я бы использовал обычное объединение, пропуская повторяющиеся значения, и группировка может быть обработана на уровне представления (например, GUI).

0 голосов
/ 10 июля 2009

Это действительно должно быть сделано на стороне клиента, но вот возможное решение:

SELECT  IF(od.order_id > 0, NULL, o.order_id),
        IF(od.order_id > 0, NULL, o.order_date),
        od.description, od.value
FROM    order o
JOIN    order_data od
ON      od.order_id = o.order_id
GROUP BY
        o.order_id, od.order_data_id WITH ROLLUP
0 голосов
/ 10 июля 2009

В продолжение ответа Йозефа запрос, подобный следующему, может послужить основой вашего решения:

SELECT `Order Id`, `Order Data`, `Description`, `Value` FROM `OrderHeader` INNER JOIN `OrderItem` ON `OrderHeader`.`Order Id` = `OrderItem`.`Order Id` ORDER BY `Order Id`

(где OrderHeader - это имя вашей первой таблицы, а OrderItem - имя вашей второй). Упорядочивание по идентификатору заказа сгруппирует строки из одного заказа вместе. Как говорит Йозеф, остальная часть презентации будет зависеть от приложения.

0 голосов
/ 10 июля 2009

Предполагая, что table1, table2 являются таблицами. Вы можете сделать

select OrderId, OrderDate, Description, Value from Table1,Table2 where Table1.OrderId = Table2.OrderId

OrderId используется для сопоставления записей в обеих таблицах в предложении where.

0 голосов
/ 10 июля 2009

Предположим, вы поддерживаете ограничение внешнего ключа между TABLE1 и TABLE2 в поле ORDER_ID ....

SELECT t1.ORDER_ID as [ORDER ID],
       t1.ORDER_DATE as [ORDER DATE],
       t2.DESCRIPTION,
       t2.VALUE
FROM 
       TABLE1 t1 INNER JOIN TABLE2 t2 ON
              t1.ORDER_ID = t2.ORDER_ID

Затем в графическом интерфейсе игнорировать повторяющиеся значения ...

ИЛИ ты можешь принять СОЮЗ ...

SELECT ORDER_ID as [ORDER ID],
       ORDER_DATE as [ORDER DATE],
       NULL as DESCRIPTION,
       NULL as VALUE
FROM TABLE1
     ORDER BY ORDER_ID

UNION ALL

SELECT NULL as [ORDER ID],
       NULL as [ORDER DATE],
       DESCRIPTION,
       VALUE
FROM TABLE2
     ORDER BY ORDER_ID

но вы все равно должны сделать несколько вещей в графическом интерфейсе.

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