2009-10-15 49 views
1

我有了这个查询:联盟和两个内部联接假列?

SELECT * FROM (
(SELECT ACCOUNTS.INSTALLTIME, ACCOUNTS.HONAME, ACCOUNTS.ADDRESS, ACCOUNTS.CITY, ACCOUNTS.STATE, ACCOUNTS.ZIP, ACCOUNTS.JOBNUMBER, ACCOUNTS.INSTALLDATE, ACCOUNTS.RESULT, ACCOUNTS.NOTES, ACCOUNTS.SMNOTES, technicians.technumber, technicians.boardplacing 
FROM ACCOUNTS 
INNER JOIN technicians ON ACCOUNTS.INSTALLER = technicians.technumber) 
UNION 
(SELECT service.servicetime, service.Customername, service.address, service.city, service.state, service.zip, service.ID, service.serviceday, service.result, service.servicenotes, service.board, technicians.technumber, technicians.boardplacing 
FROM service 
INNER JOIN technicians ON service.technician= technicians.technumber) 
) as t WHERE t.INSTALLDATE = '$date' ORDER BY t.boardplacing 

有没有什么办法可以让类似的查询:

SELECT * FROM (
(SELECT ACCOUNTS.INSTALLTIME, ACCOUNTS.HONAME, ACCOUNTS.ADDRESS, ACCOUNTS.CITY, ACCOUNTS.STATE, ACCOUNTS.ZIP, ACCOUNTS.JOBNUMBER, ACCOUNTS.INSTALLDATE, ACCOUNTS.RESULT, ACCOUNTS.NOTES, ACCOUNTS.SMNOTES, '' as priority, ACCOUNTS.PAFS, ACCOUNTS.upsell, ACCOUNTS.TERM, ACCOUNTS.MMRUPGRADE, ACCOUNTS.WARRANTY, ACCOUNTS.EFT, technicians.technumber, technicians.boardplacing 
FROM ACCOUNTS 
INNER JOIN technicians ON ACCOUNTS.INSTALLER = technicians.technumber) 
UNION 
(SELECT service.servicetime, service.Customername, service.address, service.city, service.state, service.zip, service.ID, service.serviceday, service.result, service.servicenotes, service.board, '', '', '', '', '', '', technicians.technumber, technicians.boardplacing 
FROM service 
INNER JOIN technicians ON service.technician= technicians.technumber) 
) as t WHERE t.INSTALLDATE = '$date' ORDER BY t.boardplacing 

基本上我需要在我的工会假列。有没有什么办法可以把连接关掉?还有其他更好的方法来做到这一点吗?

+0

只要联合中的列数匹配,就应该可以工作。 – 2009-10-15 16:21:23

+0

列匹配,但它仍然给我︰ 提供的参数不是一个有效的MySQL结果资源 – mlebrun15 2009-10-15 16:24:45

+1

mysql_error()说什么? – Greg 2009-10-15 16:28:44

回答

3

当我写一个联合查询,需要“假”或“伪”栏目,我只是用:

NULL AS Fake

所以整个查询将是这个样子;

SELECT A.CHEESE, A.BREAD, A.GARLIC, A.COST 
FROM ACHEESETABLE A 
WHERE A.BREAD = WHEAT 

UNION ALL 

SELECT NULL AS CHEESE, B.BREAD, NULL AS GARLIC, B.COST 
FROM BCHEESYTABLE B 
WHERE B.COST > 15 

这样两个查询有CHEESEGARLIC列,但BCHEESYTABLE不包含列,CHEESEGARLIC。这样做也允许对两个查询使用不同的WHERE标准,因此实质上可能在同一查询中有两个不同的记录群体。