2017-02-16 3 views
0

Я пытаюсь получить данные из базы данных mysql из 5 разных таблиц, но это не сработало, как должно, и ничего не отображало.Как получить данные из базы данных mysql, соединяющей 5 разных таблиц

таблицы:

  • site_info
  • site_coordinates
  • owner_info
  • subcontractor_info
  • company_info

site_info:

  • siteID
  • CompanyID -siteNAME
  • OwnerId
  • subcontractorID
  • equipmentTYPE

сайт координаты:

  • siteID

  • широта

  • долгота

  • высота

owner_info:

  • OwnerId
  • OwnerName
  • ownerCONTACT

subcontractor_info:

  • subcontractorID
  • subcontractorCOMPANY
  • subcontractorNAME
  • subcontractorCONTACT

company_info:

  • CompanyID
  • COMPANYNAME

MySQL запросов:

select 
    site_info.siteID,site_info.siteNAME ,site_info.equipmentTYPE,site_coordinates.latitude,site_coordinates.longitude,site_coordinates.height ,owner_info.ownerNAME,owner_info.ownerCONTACT,company_info.companyNAME,subcontractor_info.subcontractorCOMPANY,subcontractor_info.subcontractorNAME,subcontractor_info.subcontractorCONTACT 
from `site_info` 
INNER JOIN `owner_info` 
    on site_info.ownerID = owner_info.ownerID 
INNER JOIN `company_info` 
    on site_info.companyID = company_info.companyID 
INNER JOIN `subcontractor_info` 
    on site_info.subcontractorID = subcontractor_info.subcontractorID 
INNER JOIN `site_coordinates` 
    on site_info.siteID=site_coordinates.site_id 
where owner_info.ownerID = 159 

Где моя ошибка, и есть ли лучший способ сделать это?

+3

Попробуйте сделать каждый INNER JOIN LEFT JOIN и сообщите нам, если вы вернете записи. – Daan

+0

Для этого нужны функции ошибок. – aynber

+0

Вы получаете какие-либо ошибки или просто не возвращаете данные? – SaggingRufus

ответ

1

Я решаю, что вам просто нужно перейти на ЛЕВЫЙ ПРИСОЕДИНЕНИЕ.

так обновленный запрос выглядит:

select 
site_info.siteID,site_info.siteNAME ,site_info.equipmentTYPE,site_coordinates.latitude,site_coordinates.longitude,site_coordinates.height ,owner_info.ownerNAME,owner_info.ownerCONTACT,company_info.companyNAME,subcontractor_info.subcontractorCOMPANY,subcontractor_info.subcontractorNAME,subcontractor_info.subcontractorCONTACT from `site_info` 
LEFT JOIN `owner_info` 
on site_info.ownerID = owner_info.ownerID 
LEFT JOIN `company_info` 
on site_info.companyID = company_info.companyID 
LEFT JOIN `subcontractor_info` 
on site_info.subcontractorID = subcontractor_info.subcontractorID 
LEFT JOIN `site_coordinates` 
on site_info.siteID=site_coordinates.siteID 
where owner_info.ownerID = 159 

спасибо за ваши комментарии и ответы

+1

Что касается owner_info, 'LEFT JOIN x ... WHERE x ...' идентичен 'INNER JOIN x ...' – Strawberry

0

Запросов синтаксически корректен. Поскольку вы сталкиваетесь с проблемами вывода, проверьте свою алгебру отношений. Используете ли вы подходящие условия JOIN между ними? Если каждая из двух таблиц имеет общий атрибут, вы можете выполнять Natural Join, то есть без предоставления условий, общий атрибут будет отсортирован, и я бы написал такие сложные запросы, используя ключевое слово ALIAS 'AS'.

SELECT 
    site_info.siteID, 
    site_info.siteNAME, 
    site_info.equipmentTYPE, 
    site_coordinates.latitude, 
    site_coordinates.longitude, 
    site_coordinates.height, 
    owner_info.ownerNAME, 
    owner_info.ownerCONTACT, 
    company_info.companyNAME, 
    subcontractor_info.subcontractorCOMPANY, 
    subcontractor_info.subcontractorNAME, 
    subcontractor_info.subcontractorCONTACT   
FROM `site_info` AS SI JOIN `owner_info` AS OI 
    ON SI.ownerID = OI.ownerID 
    JOIN `company_info` AS CI 
    ON SI.companyID = CI.companyID 
    JOIN `subcontractor_info` AS SUBI 
    ON SI.subcontractorID = SUBI.subcontractorID 
    JOIN `site_coordinates` AS SC 
    ON SI.siteID=SC.site_id 
WHERE owner_info.ownerID = 159; 
Смежные вопросы