2010-07-29 7 views
8

je ne peux pas pour la vie de me comprendre pourquoi cela est erroringMYSQL erreur 1248 (42000): Chaque table dérivée doit avoir son propre alias

SELECT * FROM 
SELECT 
c.city_id, 
p.prop_ynow_id, 
p.propertyid, 
p.prop_add_value, 
p.name, 
picture, 
ifnull(p.address,'') as`location`, 
ifnull(city,'')as`city`, 
ifnull(ShortCut,'') as `state`, 
ifnull(p.zip,'') as `zip`, 
min(if(pr.minrent = 0,99999999,pr.minrent)) as minrent, 
max(pr.maxrent) as maxrent, 
'' as service, 
hood_id, 
ifnull(p.phone,'') as `phone`, 
latitude, 
longitude, 
min(CAST(pu.fullBath AS UNSIGNED)) as`minbath`, 
max(CAST(pu.fullBath AS UNSIGNED)) as`maxbath`, 
min(CAST(pu.Bed AS UNSIGNED)) as`minbed` , 
max(CAST(pu.Bed AS UNSIGNED)) as`maxbed`, 
'' as url, 
'' as source_id, 
'' as source_name, 
'' as addresscode, 
'' as citycode, 
'' as ctime, 
'' as paid, 
'' as similar_url, 
'' as created_at, 
'' as updated_at, 
'' as city_name, 
'' as service_listing_id 

FROM 
wiki_city_list c join propertyinfo p on c.city_id=p.city 
join ynow_rentwiki.Property_Unitlayout pu on p.prop_ynow_id=pu.P_Ident 
join (SELECT CAST(substring_index(if(Rent >0 ,Rent,RentLow),'.',1) AS UNSIGNED) as minrent, CAST(substring_index(if(Rent >0,Rent,Renthigh),'.',1) AS UNSIGNED) as maxrent,PRE_Ident,P_Ident,UNL_Ident,RTY_Ident from ynow_rentwiki.Property_rents where P_Ident in (3958, 4576, 4577) and (Rent!='' or (Rentlow!='' and Renthigh!=''))) as pr on pu.UNL_Ident=pr.UNL_Ident 
join state s on (p.state = s.stateid OR p.state = s.ShortCut) 
WHERE 
pu.Status='Active' 
and p.delete_date='0000-00-00' 

GROUP BY 
c.city_id, p.prop_ynow_id 

UNION 
SELECT 
c.city_id, 
p.prop_ynow_id, 
p.propertyid, 
p.prop_add_value, 
p.name, 
picture, 
ifnull(p.address,'') as`location`, 
ifnull(city,'')as`city`, 
ifnull(ShortCut,'') as `state`, 
ifnull(p.zip,'') as `zip`, 
min(if(pr.minrent = 0,99999999,pr.minrent)) as minrent, 
max(pr.maxrent) as maxrent, 
'' as service, 
hood_id, 
ifnull(p.phone,'') as `phone`, 
latitude, 
longitude, 
min(CAST(pu.fullBath AS UNSIGNED)) as`minbath`, 
max(CAST(pu.fullBath AS UNSIGNED)) as`maxbath`, 
min(CAST(pu.Bed AS UNSIGNED)) as`minbed` , 
max(CAST(pu.Bed AS UNSIGNED)) as`maxbed`, 
'' as url, 
'' as source_id, 
'' as source_name, 
'' as addresscode, 
'' as citycode, 
'' as ctime, 
'' as paid, 
'' as similar_url, 
'' as created_at, 
'' as updated_at, 
'' as city_name, 
'' as service_listing_id 

FROM 
wiki_city_list c join propertyinfo p on c.city_id=p.city 
join ynow_rentwiki.Property_Unitlayout pu on p.prop_ynow_id=pu.P_Ident 
join (SELECT CAST(substring_index(if(Rent >0 ,Rent,RentLow),'.',1) AS UNSIGNED) as minrent, CAST(substring_index(if(Rent >0,Rent,Renthigh),'.',1) AS UNSIGNED) as maxrent,PRE_Ident,P_Ident,UNL_Ident,RTY_Ident from ynow_rentwiki.Property_rents where P_Ident in (9744) and (Rent!='' or (Rentlow!='' and Renthigh!=''))) as pr on pu.UNL_Ident=pr.UNL_Ident 
join state s on (p.state = s.stateid OR p.state = s.ShortCut) 
WHERE 
pu.Status='Active' 
and p.delete_date='0000-00-00' 

GROUP BY 
c.city_id, p.prop_ynow_id 

UNION 
SELECT 
'' as prop_ynow_id, 
id as propertyid, 
0 as prop_add_value, 
t.name as name, 
'' as picture, 
t.address as location, 
t.city as city, 
s.ShortCut as state, 
t.zip as zip, 
CAST(REPLACE(REPLACE(t.price,'$',''),',','') as UNSIGNED) as minrent, 
'' as maxrent, 
t.service as service, 
'' as hood_id, 
'' as phone, 
t.latitude as latitude, 
t.longitude as longitude, 
t.bathrooms as minbath, 
'' as maxbath, 
t.bedrooms as minbed, 
'' as maxbed, 
t.url as url, 
t.source_id as source_id, 
t.source_name as source_name, 
t.addresscode as addresscode, 
t.citycode as citycode, 
t.ctime as ctime, 
t.paid as paid, 
t.similar_url as similar_url, 
t.created_at as created_at, 
t.updated_at as updated_at, 
SUBSTRING_INDEX(c.city_name,'_',1) as city_name,  
t.service_listing_id as service_listing_id 

FROM LBCPrimary.third_party_properties as t, LBCPrimary.wiki_city_list as c, LBCPrimary.state as s 
WHERE 
t.city in ('230') 
and 
address <> '' and 
t.city = c.city_id and 
c.city_state = s.stateid 

order by t.ctime 
desc 
limit 46 as a limit 0,50 
+0

Votre requête commence par SELECT * FROM SELECT - pouvez-vous oublier les crochets? et devrait être SELECT * DE (SELECT .... –

Répondre

20

Cela signifie exactement ce qu'il dit - chaque table dérivée doit ont un alias. SELECT a.* FROM (SELECT ....)a

Mise à jour. Cela devrait fonctionner pour vous:

SELECT xxx.* FROM 
(
    SELECT .... 
    FROM .... 
    UNION 
    (
     SELECT .... 
     FROM ..... 
     LIMIT 46 
    ) 
    LIMIT 50 
)xxx 
+1

Je ne suis pas sûr de ce que tu veux dire ... j'ai essayé de l'ajouter, mais il y a maintenant je erreur 1064 (42000): Vous avez une erreur votre syntaxe SQL, consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'comme une limite 0,50)' à la ligne 144 – Trace

+0

Désolé, je n'ai pas remarqué que l'un de vos tableaux avait déjà un alias une. Utilisez un alias différent - 'SELECT xxxx. * FROM (SELECT ....) xxxx' – a1ex07

+0

Et lorsque vous utilisez un alias pour' SELECT ... FROM t1 JOIN t2 JOIN t3 ... 'vous devez également inclure SELECT entre parenthèses ('(SELECT ... FROM t1 JOIN t2 JOIN t3 ...) [AS] a'). C'est pourquoi il se plaint sur près de 'comme une limite 0,50' 'à la ligne 144 " – a1ex07

4

La première ligne de votre requête est

SELECT * FROM 

qui semble être inutile (comme les trois requêtes comprennent déjà des clauses filles fusionnées SELECT et FROM).

La suppression de cette ligne inutile devrait résoudre le problème; alternativement, l'ajout d'un ( juste après la première ligne, et l'ajout d'un ) QRYALIAS à la fin permettrait également de résoudre le problème.