2010-02-19 19 views
5

seguente query funziona bene in MySQL 5.xMySQL LEFT JOIN subquery fallire

SELECT 
    m_area.id, m_area.cn_areaName, m_area.de_areaName, 
    m_area.en_areaName,m_area.jp_areaName,t_shop.count 
FROM 
    m_area left join 
(
select t_shop.areaID, count(areaID) AS count 
from t_shop 
group by t_shop.areaID 
) t_shop 
on m_area.id = t_shop.areaID 

Tuttavia, quando devo correre in un DB MySQL 4.0.23 con stessa struttura di DB e dati che restituiscono solo seguente messaggio :

1064 - Si è verificato un errore nella sintassi SQL. Controllare il manuale che corrisponde alla versione del server MySQL per la sintassi diritto di utilizzare vicino a '[

  select t_shop.areaID, count(areaID) AS count 
      from t_s 

Ho provato molte volte, ma ancora non è riuscito. Viene lasciato il join alla sottoquery non consentita in MySQL 4.x? Quindi questo significa che devo farlo con un tavolo temporaneo?

Grazie in anticipo!

risposta

1

take away "count (areaid) AS count"

I più colonne nella subquery è rovinare il join.

una tabella temporanea dovrebbe funzionare bene ....

Buon divertimento!

+0

Hai ragione posso farlo solo con la scheda temperatura DROP TABLE TEMPORARY, se esiste temp_shop; CREATE TEMPORARY TABLE temp_shop (areaID int (11), count int (11)); INSERISCI IN temp_shop selezionare t_shop.areaid, conteggio (areaid) AS conteggio \t \t \t \t da t_shop gruppo \t \t \t \t da t_shop.areaID; SELEZIONA \t \t \t \t m_area.id, m_area.cn_areaName, m_area.de_areaName, \t \t \t \t m_area.en_areaName, m_area.jp_areaName, temp_shop.count \t \t \t \t DA \t \t \t \t m_area left join temp_shop \t \t \t \t su m_area.id = temp_shop.areaID; A volte dobbiamo codificare alcune vecchie macchine, il che è molto doloroso. –

1

L'unica cosa che mi veniva in mente è l'aggiunta del tablename al vostro areaid nella sottoquery o rinominando la parola riservata count a Cnt.

SELECT m_area.id 
     , m_area.cn_areaName 
     , m_area.de_areaName 
     , m_area.en_areaName 
     ,m_area.jp_areaName 
     ,t_shop.cnt 
FROM  m_area 
     left join ( 
      select  t_shop.areaID 
        , count(t_shop.areaID) AS cnt 
      from  t_shop 
      group by t_shop.areaID 
     ) t_shop on m_area.id = t_shop.areaID 
+0

thx per il tuo commento, ma ancora non è riuscito –

4

Sottointerrogazioni erano abbastanza non ben supportato con MySQL 4.0: è stato possibile usarli (almeno, in qualche modo utile vera,) con MySQL 4.1 - e MySQL 4.0 è veramente vecchio, ora. ..


Si veda ad esempio la pagina del manuale di MySQL: 12.2.8. Subquery Syntax(citando, sottolineatura mia):

A partire da MySQL 4.1, tutti i moduli e le operazioni di subquery richiesti dallo standard SQL sono supportati, e alcune funzionalità che sono specifiche per MySQL .

Con le versioni di MySQL 4.1 prima, si era necessario lavoro intorno o evitare l'uso di sottoquery.
In molti casi, subquery possono successo essere riscritti utilizzando unisce e altri metodi. Vedi Section 12.2.8.11, “Rewriting Subqueries as Joins for Earlier MySQL Versions”.

+0

Il link che hai fornito essentialy dice che ciò che fa OP è la soluzione al problema si parla ?! –