Joe
Joe

Reputation:

MySQL alternate row selects

Lets say I have data in two tables. In one I have Order ID and Order Date. In the other I have Order ID, Description and Value. I know how to do simple SELECTs but what would I use to output something like this?

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

Upvotes: 0

Views: 1027

Answers (5)

S M Kamran
S M Kamran

Reputation: 4503

Supposing you maintain a foreign key constraint between TABLE1 and TABLE2 on ORDER_ID field....

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

Then on the GUI ignore the repeating values...

OR you can take UNIONS...

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

but you still have to do few thing on the GUI.

Upvotes: 0

Quassnoi
Quassnoi

Reputation: 425713

This really should be done on the client side, but here is the possible solution:

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

Upvotes: 0

Jason Musgrove
Jason Musgrove

Reputation: 3583

Expanding upon Josef's answer, a query like the following may serve as the basis of your solution:

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

(Where OrderHeader is assumed to be the name of your first table, and OrderItem is assumed to be the name of your second). Ordering by Order Id will group rows from the same order together. As Josef says, the rest of the presentation will be up to the application to do.

Upvotes: 0

Pradeep
Pradeep

Reputation: 4127

Assuming table1, table2 are the tables. You can do

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

The OrderId is used to match the records in both the tables in the where clause.

Upvotes: 0

Josef Pfleger
Josef Pfleger

Reputation: 74537

I would use a regular join, omitting repeating values and grouping can be handled the the presentation layer (e.g. GUI).

Upvotes: 4

Related Questions