好的,这就是事情。我有以下表格:
> YEARS
------------------------------
ID YEAR ACTUAL
------------------------------
1 2014-15 TRUE
2 2015-16 FALSE
> SHOPS
------------------------------
ID NAME ...
------------------------------
1 ThisShop ...
> ITA
------------------------------
ID YEAR_ID SHOP_ID
------------------------------
1 1 1
2 1 2
...
> INSPECTORS
------------------------------
ID INSPECTOR
------------------------------
1 M. Black
2 M. White
3 M. Brown
...
> ITA_INSPECTORS
-------------------------------------------------------
ID ID_ITA ID_INSPCTR StartDate EndDate
-------------------------------------------------------
这就是问题,我想要一个查询来显示所有INSPECTORS
,ITA_INSPECTORS
列出的SHOPS ID = 1 AND YEARS ID = 1
ITA_INSPECTORS
。如果检查员出现在ITA_ID
表中,则显示开始和结束日期,如果没有,则显示没有日期。
请注意,所选商店的ITA_INSPECTORS
表中可能没有ITA_INSPECTORS
(假设INSPECTORS
表为空,我仍然需要查看所有INSPECTOR名称)。
ITA_INSPECTORS
表是用于构建SELECT * FROM ((ITA
INNER JOIN YEARS ON ITA.ID_YEAR = YEARS.ID)
LEFT JOIN ITA_INSPECTORS ON ITA.ID = ITA_INSPECTORS.ID_ITA)
RIGHT JOIN INSPECTORS ON ITA_INSPECTORS.ID_INSPCTR = INSPECTORS.ID
WHERE ITA.SHOP_ID = 1 AND ((YEARS.ACTUAL) = True);
表的静态数据。
我试过这个问题:
RIGHT JOIN
在我添加Join expression not supported
子句之前一直有效,然后我收到错误- (void)getAddressFromLatLon:(double)pdblLatitude withLongitude:(double)pdblLongitude
{
NSDictionary *adressWithLtLn = @{
@"latitude":[NSNumber numberWithDouble:pdblLatitude],
@"longtitude":[NSNumber numberWithDouble:pdblLatitude]};
^^^^^^^^
}
。
有人可以指导我这样做的正确方法吗?
答案 0 :(得分:0)
一个解决方案是拆分查询,使其没有这些冲突的连接 所以创建一个查询,例如q1
SELECT *
FROM (
(
ITA INNER JOIN YEARS ON ITA.ID_YEAR = YEARS.ID
) LEFT JOIN ITA_INSPECTORS ON ITA.ID = ITA_INSPECTORS.ID_ITA
)
然后创建第二个查询以进行所需的正确连接
SELECT INSPECTORS.ID, INSPECTORS.INSPECTOR, q1.*
FROM INSPECTORS LEFT JOIN q1 ON INSPECTORS.ID = q1.ID_ITA;