2012-01-19 3 views
-2

Я пишу приложение PHP MySQL, и я был запущен следующий запрос на выборку:MySQL запрос с внутренним соединением не в состоянии

SELECT 
    individual_marriage.pk_marriage_ID, 
    husband.individual_person_FirstName, 
    husband.individual_person_LastName, 
    wife.individual_person_FirstName, 
    wife.individual_person_LastName 
FROM 
    (
     (
      individual_marriage AS im 
      INNER JOIN person AS husband ON 
      individual_marriage.fk_IndividualID_male=husband.pk_person 
     ) 
     INNER JOIN person AS wife ON individual_marriage.fk_IndividualID_female=wife.pk_person 
    ) 
WHERE 
    im.Sec5A_applicable='yes' 

Проблема лежит где-то в WHERE заявление и mysqli_query возвращает ложь. mysql_errno() и mysql_error() также как-то возвращаются.

+0

Я не знаю, почему вопрос был помечен. Я много пробовал его решить, попробовал несколько разных стилей синтаксиса. И я могу запустить его без утверждения where. –

ответ

0
SELECT im.pk_marriage_ID, 
     husband.individual_person_FirstName, 
     husband.individual_person_LastName, 
     wife.individual_person_FirstName, 
     wife.individual_person_LastName 
FROM individual_marriage AS im INNER JOIN person AS husband 
       ON im.fk_IndividualID_male = husband.pk_person 
     INNER JOIN person AS wife 
       ON im.fk_IndividualID_female = wife.pk_person) 
WHERE im.Sec5A_applicable = 'yes' 

Мы поможем Вам, если вы уже столкнулись с SCHEMA вашего стола. Если вы запустите этот запрос и вернете пустые строки, то это означает, что в individual_marriage есть столбцы, которые не указаны в таблице person, а также потому, что вы также используете INNER JOIN.

UPDATE

SELECT im.pk_marriage_ID, 
     COALESCE(husband.individual_person_FirstName,'') as husbandFirstName 
     COALESCE(husband.individual_person_LastName, '') as husbandFamilyName 
     COALESCE(wife.individual_person_FirstName,'') as WifeFirstName 
     COALESCE(wife.individual_person_LastName ,'') as WifeLastName 
FROM individual_marriage AS im LEFT JOIN person AS husband 
       ON im.fk_IndividualID_male = husband.pk_person 
     LEFT JOIN person AS wife 
       ON im.fk_IndividualID_female = wife.pk_person) 
WHERE im.Sec5A_applicable = 'yes' 
+0

Привет, удаление скобок не помогло. Схема такая. Существует таблица с человеком, в качестве первичного ключа - pk_person. В таблице для мужчин есть мужчины и женщины, и их брак записывается в таблице индивидуального брака. Sec5A_applicable - столбец в таблице individual_marriage, либо да, либо нет. –

+0

Если я просто исключил всю инструкцию where, т. Е./* WHERE im.Sec5A_applicable = 'yes' * /, тогда запрос работает просто отлично. Поэтому утверждение о том, что столбцы могут не существовать, неверно. –

+0

@ChinmayKamat я обновил ответ. что такое тип данных 'Sec5A_applicable'? –

0

Если вы можете прикрепить СОЗДАТЬ таблицу структуры как таблицы indivisual_marriage и лица таблицы, выполнив запрос: SHOW CREATE TABLE indivisual_marriage; ВЫСТАВКА ТАБЛИЦА person;

сказать Кроме того, что вы хотите достичь с помощью обеих таблиц может быть, мы можем сформулировать лучший запрос, чем это

+0

CREATE TABLE 'individual_marriage' ( ' pk_marriage_ID' Int (7) NOT NULL AUTO_INCREMENT, 'fk_IndividualID_male' INT (7) NOT NULL,' fk_IndividualID_female' INT (7) NOT NULL, 'Date_Start' дата NOT NULL,' Date_End' дата DEFAULT NULL, 'Sec5A_applicable' перечисление ('да', 'нет') NOT NULL, PRIMARY KEY (' pk_marriage_ID') ) ENGINE = InnoDB AUTO_INCREMENT = 15 DEFAULT CHARSET = latin1 –

+0

Результат Создать таблицу слишком большой, чтобы вставлять сюда. В этой таблице содержится более 60 столбцов. Но столбцы, которые нас интересуют, следующие: CREATE TABLE 'person' (' pk_person' int (7) unsigned NOT NULL AUTO_INCREMENT, 'individual_person_FirstName' varchar (25) NOT NULL, ' individual_person_MiddleName' varchar (25) NOT NULL, 'individual_person_LastName' varchar (25) NOT NULL,' individual_person_Gender' enum ('male', 'female') NOT NULL, PRIMARY KEY ('pk_person') –

0

Я решил проблему из чистой немой удачи. Все, что мне нужно было сделать, это добавить новый набор круглых скобок вокруг имени первой таблицы в предложении FROM. Я воспроизвожу код здесь:

SELECT 
individual_marriage.pk_marriage_ID, 
husband.individual_person_FirstName, 
husband.individual_person_LastName, 
wife.individual_person_FirstName, 
wife.individual_person_LastName 
FROM 
    (((individual_marriage) 
INNER JOIN 
person AS husband 
ON 
individual_marriage.fk_IndividualID_male=husband.pk_person) 
INNER JOIN 
person AS wife 
ON 
individual_marriage.fk_IndividualID_female=wife.pk_person) 
WHERE 
individual_marriage.Sec5A_applicable='yes' 

Это то, что не имеет смысла для меня. До сих пор я еще не видел такого решения в любом учебнике. Может ли кто-нибудь объяснить, как изменилось значение заявления после добавления этих скобок?

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