2015-04-29 3 views
1

У меня есть 2 таблицыMySQL запросов от 2 таблиц с условиями

ТоварыЗаказа

+--------+------------+------------------+---------+ | item_id| item_name | Item_type | trans | +--------+------------+------------------+---------+ | 1 | Devon | line_item | 0 | | 2 | 100 | coupon | 0 | | 3 | Contin | line_item | 1 | +--------+------------+------------------+---------+

orderitems_data

1+--------+------------+------------------+-----------+ | id | item_id | Item_key | key_val | +--------+------------+------------------+------------+ | 1 | 1 | Delivery | 2015/04/03 | | 2 | 1 | attrib | pick_up | | 3 | 1 | qty | 1 | | 4 | 2 | discount | 0 | | 5 | 3 | Delivery | 2015/04/15 | | 5 | 3 | attrib | doorstep | +--------+------------+------------------+------------+

мне нужно выбрать 'item_name' из 'ТоварыЗаказа' где «Item_type = line_item» и «trans = 0», «key_val» из «orderitems_data», где «Item_key = Delivery», и «key_val», где «Item_key = attribute» для того же «item_name»

Затем отобразите их. Я борюсь с запросом, я хочу написать

SELECT orderitems.item_name AS item_name WHERE orderitems.Item_type='line_item' AND trans=0, orderitems_data.key_val AS deliverydate WHERE Item_key='Delivery', orderitems_data.key_val AS location WHERE Item_key='attrib' FROM orderitems INNER JOIN order_items_data ON orderitems.item_id = orderitems_data.item_id 

Но ясно, что это не так.

Может ли кто-нибудь указать мне правильное направление, пожалуйста?

В результате я ищу, чтобы получить это

Devon pick_up 2015/04/03 
+0

посмотреть SQL присоединяется. – jbutler483

+0

Посмотрите синтаксис sql – Strawberry

+0

Можете ли вы дать команду create table, чтобы мы могли попробовать. –

ответ

0
SELECT oi.item_name, oid.key_val 
FROM OrderItem oi, Orderitem_Data oid 
WHERE oi.item_id = od.item_id 
AND oi.item_type = 'line_item' 
AND oid.item_key = 'Delivery' 

Не получить то, что вы просили в конце концов

1

Это поможет вам -

SELECT orderitems.item_name AS item_name, orderitems_data.key_val AS deliverydate, orderitems_data.key_val AS location from orderitems left join orderitems_data 
ON orderitems.item_id = orderitems_data.item_id 
WHERE orderitems.Item_type='line_item' AND 
    orderitems.trans=0 and 
    (orderitems_data.Item_key='Delivery' or orderitems_data.Item_key='attrib') 
0

Я думаю, это будет работать

SELECT i.item_name, d.Item_key FROM orderitems i LEFT JOIN orderitems_data d on i.item_id =d.item_id WHERE i.Item_type='line_item' AND i.trans=0 AND d.Item_key in('attrib', 'Delivery'); 
0

Вот запас ответ для построения псевдо-нормированного стержня из набора EAV данных:

SELECT i.* 
    , MAX(CASE WHEN d.item_key = 'attrib' THEN key_val END) attrib 
    , MAX(CASE WHEN d.item_key = 'Delivery' THEN key_val END) Delivery 
    , MAX(CASE WHEN d.item_key = 'qty' THEN key_val END) qty 
    , MAX(CASE WHEN d.item_key = 'discount' THEN key_val END) discount 
    FROM orderitems i 
    LEFT 
    JOIN orderitems_data d 
    ON d.item_id = i.item_id 
GROUP 
    BY i.item_id; 
+---------+-----------+-----------+-------+----------+------------+------+----------+ 
| item_id | item_name | Item_type | trans | attrib | Delivery | qty | discount | 
+---------+-----------+-----------+-------+----------+------------+------+----------+ 
|  1 | Devon  | line_item |  0 | pick_up | 2015/04/03 | 1 | NULL  | 
|  2 | 100  | coupon |  0 | NULL  | NULL  | NULL | 0  | 
|  3 | Contin | line_item |  1 | doorstep | 2015/04/15 | NULL | NULL  | 
+---------+-----------+-----------+-------+----------+------------+------+----------+ 

Обратите внимание мои предыдущие комментарии по поводу избыточности столбца идентификаторов в таблице orderitems_data и важности использования правильных данных где это возможно.

0

Если я не ошибаюсь, вы хотите получить, зависит от Item_type = 'line_item' и trans = 0 и od.Item_key = 'Delivery' OR od.Item_key = 'attrib' затем используйте ниже запрос

SELECT DISTINCT 
    o.*, 
    od.key_val, 
    od.Item_key 
FROM 
    orderitems o 
    LEFT JOIN orderitems_data od 
    ON o.item_id = od.item_id 
WHERE o.Item_type = 'line_item' 
    AND o.trans = 0 
    AND (od.Item_key = 'Delivery' OR od.Item_key = 'attrib') 
Смежные вопросы