1
我想要某些表中的某些列。我對用戶有問題。 userId
可以是0,但我想要它返回爲null
。當我用這個簡單的聯合聲明中這樣做,結果是這樣的:選擇聯合SQL語句的問題
SELECT
a.appointmentId,
u.prename AS user_prename,
u.lastname AS user_lastname,
a.start AS START ,
a.end AS END ,
w.workerId AS workerid
FROM ios_appointments a
JOIN ios_user u
JOIN ios_worker w
JOIN ios_partners p
WHERE a.workerid_fk = w.workerid
AND w.partnerid_fk = p.partnerid
AND a.userid_fk = u.userid
AND p.code = 'DEMO6003'
union
select
a.appointmentId,
null,
null,
a.start AS START ,
a.end AS END ,
w.workerId AS workerid
from ios_appointments a
JOIN ios_user u
JOIN ios_worker w
JOIN ios_partners p
where
a.userid_fk = 0;
預期結果:
43 NULL NULL 2013-01-10 02:00:00 2013-01-10 02:30:00 3
真實結果:
43 NULL NULL 2013-01-10 02:00:00 2013-01-10 02:30:00 1
43 NULL NULL 2013-01-10 02:00:00 2013-01-10 02:30:00 2
43 NULL NULL 2013-01-10 02:00:00 2013-01-10 02:30:00 3
問題: 的語句返回行爲每個在數據庫中註冊的工作者。我該如何解決它?
表模式:
CREATE TABLE `ios_workinghours` (
`workingHourId` int(11) NOT NULL AUTO_INCREMENT,
`start` time DEFAULT NULL,
`end` time DEFAULT NULL,
`workerid_fk` int(11) NOT NULL,
PRIMARY KEY (`workingHourId`),
KEY `workerid_fk` (`workerid_fk`)
)
create table ios_worker (
workerid int not null auto_increment,
prename varchar(255),
lastname varchar(255),
avatar varchar(255),
lineup varchar(255),
languages varchar(255),
partnerid_fk int not null,
primary key(workerid),
foreign key(partnerid_fk) references ios_partners(partnerid)
)
create table ios_user (
userid int not null auto_increment,
prename varchar(255),
lastname varchar(255),
phone varchar(255),
email varchar(255),
password varchar(255),
primary key (userid)
)
create table ios_partners (
partnerid int not null auto_increment,
code varchar(255),
partnerName varchar(255),
street varchar(255),
zipCode varchar(255),
city varchar(255),
languages varchar(255),
workers varchar(255),
lineup varchar(255),
primary key(partnerid)
)
如果您發佈的相關表模式 – Kermit
這將是有益的,如果你有多個ios_worker記錄,那麼這是預期的行爲。你想只返回MAX嗎? – sgeddes
你的期望是錯誤的。即使你有一對多的情況,你也會強迫「聯盟」的獨特性。如果您使用pCode爲'DEMO6003'的記錄以及userid_fk爲0的記錄,那麼您將擁有三個不同的workerID;這一定是這種情況。要知道如何更好地剔除它,我們需要更多地瞭解您正在做這件事的原因,並且@njk說,瞭解表格模式。 –