2015-10-27 2 views
3

У меня есть следующие таблицы:MySQL отображать столбцы из двух таблиц без repeatation

  1. рестораны:

    Restaurant_ID | Restaurant_Name | Phone_1 
    
  2. меню:

    Item_ID | Rest_ID | Item_Name | Item_price 
    

Я хочу выход:

Restaurant_ID| Item_Name | Item_price 

Я попробовал этот запрос:

SELECT r.Restaurant_ID, 
     m.Item_Name, 
     m.Item_price 
FROM restaurants r, menu m 
WHERE r.Restaurant_ID = (SELECT `Rest_ID` FROM menu WHERE Item_ID=1) LIMIT 0,1; 

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

+0

Если предположить, что '' ссылки Rest_ID' restaurants.Restaurant_ID' простой 'ВЫБРАТЬ Rest_ID AS Restaurant_ID, item_name, ITEM_PRICE от menu' будет делать. Но я полагаю, вы имели в виду, что хотите «Restaurant_Name». Item_Name | Item_price'? – Kenney

+0

Да, я хочу отобразитьRestaurant_ID | Item_Name | Item_price – retiremonk

+0

Пожалуйста, покажите пример ввода и требуемые результаты. Непонятно, что вы пытаетесь сделать, это отличается от ответов, которые были опубликованы. – Barmar

ответ

2

Попробуйте это:

SELECT r.Restaurant_ID, m.Item_Name, m.Item_price 
FROM restaurants r 
LEFT JOIN menu m ON r.Restaurant_ID=m.Rest_ID 
WHERE Item_ID=1 
+0

Разве этот запрос просто не спускается в 'SELECT Rest_ID Restaurant_ID, Item_Name, Item_price FROM menu WHERE Item_ID = 1'? – Kenney

+0

@ Kenney Да, в его текущем состоянии, это так. Однако мы не знаем, что OP хочет с этим сделать. Поля в его вопросе - просто примеры. Я уверен, что реальные таблицы имеют гораздо больше полей, и он, вероятно, хочет включить их в запрос. Мой ответ дает ему именно то, что он просил. –

0

Это поможет вам желаемый результат

SELECT r.Restaurant_ID, 
     m.Item_Name, 
     m.Item_price 
FROM restaurants r 
     JOIN ( SELECT Item_ID, Rest_ID, Item_Name, Item_price 
       FROM Menu 
       GROUP BY Item_ID, Rest_ID, Item_Name, Item_price) m 
      ON r.Restaurant_ID = m.Rest_ID 
WHERE m.Item_Id = 1 
+0

Я пробовал этот запрос, но вывод этого запроса - это все строки из обоих столбцов. Я просто хочу отобразить одну строку для каждого элемента. – retiremonk

+0

Хорошо, @Littletilli, я изменил свой запрос. Это даст вам одну строку на имя и цену для ресторана. – singhsac

+0

Если в таблице «Меню» нет дубликатов «Item_ID + Rest_ID + Item_Name + Item_Price», это даст те же результаты, что и соединение с «Menu». – Barmar

0

Я думаю, все, что нужно изменить в исходном запросе, как вы присоединиться к таблицам: FROM menu m LEFT JOIN restaurants r ON .... Прямо сейчас ваш запрос не связан с двумя таблицами.

SELECT r.Restaurant_ID,m.Item_Name,m.Item_price 
FROM menu m 
LEFT JOIN restaurants r ON m.Rest_ID = r.Restaurant_ID 
WHERE r.Restaurant_ID=(SELECT `Rest_ID` FROM menu WHERE Item_ID=1) 
+0

Это правильный запрос, но я хочу вывод для определенного rest_ID из меню. – retiremonk

+0

@ Littletilli Я дал вам ответ 53 минуты назад. вы проверили? Кажется, вы проверили все ответы, кроме моих :-) –

+0

@Racil: Спасибо за ваш быстрый ответ. Это сработало :-) – retiremonk

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