2015-08-18 4 views
0

У меня есть три таблицы, первый называется «Файл»:MySQL: Получить строку таблицы на одной колонке из трех таблиц

JobId FilenameId FileId 
5  2    1 
7  3    2 

И второй один называется «Имя файла»

Filename FilenameId 
File1   2  
File2   3 

И третий один называется «Клиент»:

ClientId JobId 
1   5 
2   7 

Теперь я хочу, чтобы получить ClientId из File1, как я могу это сделать? Я новичок в SQL.

Спасибо.

Edit: это то, что я пытался, но он не работает

Select c.ClientId 
From `File` f, Filename fn, Client c 
Where f.FilenameId = fn.FilenameId and f.JobId = c.JobId and fn.Filename = "File1"; 
+6

Узнайте о [** SQL-соединениях **] (http://www.w3schools.com/sql/sql_join.asp). Вы можете использовать несколько соединений в запросе. Предоставление прямого ответа не принесет ничего хорошего в вашей карьере. Учитесь самостоятельно, улучшайте свои навыки. –

+0

@RagingBull Итак, вы говорите, что этот запрос слишком широк? – Strawberry

+0

@Strawberry: Вам не кажется, что лучше показать путь вместо того, чтобы дать прямое решение для таких простых вопросов? FYI, я не голосовал, чтобы закрыть вопрос. –

ответ

2

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

Теперь к ВАШЕМУ вопросу. Во-первых, избавьтесь от старого стиля sql, где вы поместите все критерии соединения в предложение where. Приступайте к работе, зная правильные отношения между таблицами. Во-вторых, предложение WHERE должно основываться на ваших конкретных критериях - например, вы хотите получить файл 1. Из этого перейдите к другим таблицам. Мой личный стандарт кодирования SQL показывает сначала, какие критерии я хочу и из какой таблицы. Убедитесь, что индексы доступны для оптимизации запроса. Затем присоединитесь к другим таблицам, чтобы получить другие элементы, необходимые для завершения строки данных. (Хорошее использование табличных «псевдонимов» и поддерживайте его).

Во-первых, ваши основные критерии. Достаточно просто.

select 
     fn.FileNameID, 
     fn.FileName 
    from 
     FileName fn 
    where 
     fn.FileName = 'File1' 

Оттуда, сделать присоединяется, чтобы получить следующие элементы информации из файла на клиентские отношения

select 
     fn.FileNameID, 
     fn.FileName, 
     c.clientID 
    from 
     FileName fn 
     JOIN File f 
      on fn.FileNameID = f.FileNameID 
      JOIN Client c 
       on f.JobID = c.JobID 
    where 
     fn.FileName = 'File1' 

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

+0

Спасибо, это очень ясно! – brest1007

0

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

выберите ClientId от клиента, где JobId в (выберите JobId из файла, где FilenameId в (выберите FilenameId из имя_файла где Имя файла = "Файл1"));

+0

Это не работает. – brest1007

+0

Он показывает какой-либо результат или дает вам ошибку? – Hirak

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