У меня есть 2 таблицы MySQL. Одним из них является pastsergicalhistory_type
, а другой является pastsurgicalhistory
Соберите данные из двух разных таблиц, следующие условия
Ниже pastsergicalhistory_type
CREATE TABLE `pastsergicalhistory_type` (
`idPastSergicalHistory_Type` int(11) NOT NULL AUTO_INCREMENT,
`idUser` int(11) DEFAULT NULL,
`Name` varchar(45) NOT NULL,
PRIMARY KEY (`idPastSergicalHistory_Type`),
KEY `fk_PastSergicalHistory_Type_User1_idx` (`idUser`),
CONSTRAINT `fk_PastSergicalHistory_Type_User1` FOREIGN KEY (`idUser`) REFERENCES `user` (`idUser`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
Ниже pastsurgicalhistory
CREATE TABLE `pastsurgicalhistory` (
`idPastSurgicalHistory` int(11) NOT NULL AUTO_INCREMENT,
`idPatient` int(11) NOT NULL,
`idPastSergicalHistory_Type` int(11) NOT NULL,
`Comment` varchar(45) DEFAULT NULL,
`ActiveStatus` tinyint(1) NOT NULL,
`LastUpdated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`idPastSurgicalHistory`),
KEY `fk_PastSurgicalHistory_Patient1_idx` (`idPatient`),
KEY `fk_PastSurgicalHistory_PastSergicalHistory_Type1_idx` (`idPastSergicalHistory_Type`),
CONSTRAINT `fk_PastSurgicalHistory_PastSergicalHistory_Type1` FOREIGN KEY (`idPastSergicalHistory_Type`) REFERENCES `pastsergicalhistory_type` (`idPastSergicalHistory_Type`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_PastSurgicalHistory_Patient1` FOREIGN KEY (`idPatient`) REFERENCES `patient` (`idPatient`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
Теперь мое требование, как это, я объясню это в виде пунктов.
- Получить все данные из
pastsergicalhistory_type
гдеidUser
являетсяNULL
илиidUser
равен 1. - Получить все данные из
pastsurgicalhistory
гдеidPatient
является 2.
, как вы можете видеть, как внешний ключ pastsurgicalhistory
является основной ключ pastsergicalhistory_type
.
Я попробовал следующий запрос, но это дало мне неправильные результаты. Он отображает только то, что доступно в pastsurgicalhistory
. Данные в pastsergicalhistory_type
(которые следуют за условием в пункте 1), который не находится в pastsurgicalhistory
, не отображаются.
SELECT pastsergicalhistory_type.*,
pastsurgicalhistory.*
FROM pastsergicalhistory_type
LEFT JOIN pastsurgicalhistory ON pastsurgicalhistory.`idPastSergicalHistory_Type` = pastsergicalhistory_type.`idPastSergicalHistory_Type`
WHERE pastsergicalhistory_type.idUser = NULL OR pastsergicalhistory_type.idUser=1 AND pastsurgicalhistory.idPatient=2
Итак, как я могу решить эту проблему?
EDIT
Если я использую AND pastsurgicalhistory.idPatient=2
в моем где положение, он фактически фильтрует «весь» набор результатов. Это даст мне результаты, когда idPatient
связан с 2. Но, как я уже упоминал, мне нужны данные, которые также недоступны в таблице pastsurgicalhistory
.
Используйте скобки в вашем ИНЕКЕ, что может быть причиной вы получаете неожиданные результаты ..(A OR B) И C. Кроме того, у вас есть условие на pastsurgicalhistory, возможно, именно поэтому вы не получаете все строки в pastsergicalhistory_type – SoulTrain
на основе вашего недавнего редактирования, coudnt вы делаете 'OR'? Некоторые вещи вроде (A 'OR' B)' OR' pastsurgicalhistory.idPatient = 2 – SoulTrain
@SoulTrain: Нет. Это снова неправильно. –