2012-03-28 4 views
0

Я новичок в MySQL, и я бегу этот запрос,MySQL Резервные индексы альтернативные?

SELECT item_id,amount FROM db.invoice_line WHERE item_id = 'xxx' 
OR item_id = 'yyy' 
... 
AND invoice_id IN 
    (SELECT id_invoices FROM db.invoices 
    WHERE customer = 'zzzz' 
    AND transaction_date > DATE_SUB(NOW(), INTERVAL 6 MONTH) 
    AND sales_rep = 'aaa') ORDER BY item_id; 

То есть, выбрать несколько столбцов из таблицы, где внешний ключ найден в другой таблице.

Проблема в том, что я хотел бы иметь в результатах имя клиента. Однако имя клиента не найдено в таблице строк счета-фактуры, оно находится в таблице счетов-фактур.

Хотя я мог наивно создавать дубликат индекса при создании таблицы и вставках, мне было интересно, есть ли способ SQL выбрать правильную строку из таблицы счетов и иметь ее в наборах результатов.

Является ли производительность лучше, если я просто дублирую данные?

Спасибо, Dane

+0

Ваш вопрос не имеет ничего общего с добавлением дополнительного индекса. Это связано с добавлением надлежащего JOIN для добавления столбца в ваш SELECT. Это поможет, если вы добавите некоторые примеры данных и ваш желаемый результат, и люди здесь могут помочь вам построить правильный запрос. Можете ли вы изменить свой вопрос, чтобы предоставить дополнительную информацию? Благодарю. :) –

ответ

1

Как о чем-то вроде этого?

SELECT 
    invoice_line.item_id, 
    invoice_line.amount, 
    invoices.customer_name 
FROM db.invoice_line 
INNER JOIN db.invoices 
    ON invoice_line.invoice_id = invoices.id_invoices 
WHERE invoices.customer = 'zzzz' 
AND invoices.transaction_date > DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) 
AND invoices.sales_rep = 'aaa' 
AND (invoice_line.item_id = 'xxx' OR invoice_line.item_id = 'yyy') 
ORDER BY invoice_line.item_id; 
1

Используйте соединение между таблицами для достижения вашего результата.

Смежные вопросы