Vinzenz Mai: Migration von MySQL 3.23 -> 4.1: Problem mit Subqueries

Beitrag lesen

Hallo Ingrid,

"...WHERE
(SELECT count(cat.cid) FROM catsets As catset INNER JOIN categories AS cat ON catset.cid=cat.cid WHERE catset.id=list.id AND cat.name LIKE '%ball%') > 0"

soweit ich das allmählich überblicke, sollten es DISTINCT und ein paar INNER JOINs es doch tun. Ein inakzeptabler Lösungsversuch:

SELECT DISTINCT  
    list.label,  
    list.id,  
    list.entry_id  
FROM `list_pics` list    -- AS versteht nicht jedes aktuelle DBMS :-)  
INNER JOIN refs ref      -- Wo ist da der echte Nutzen des Alias?  
ON ref.id = list.id  
INNER JOIN catsets cs  
ON ref.id = cs.id  
INNER JOIN categories c  
ON cs.cid = c.cid  
WHERE ref.id != '163'          -- Deine irrelevante Bedingung  
    AND cs.cid = '6'           -- die gesuchte Kategorie  
    AND c.name LIKE '%ball%'   -- die zulässigen Namen  
)  
ORDER BY position  
LIMIT 1                        -- was nicht jedes DBMS versteht

Versagt schon einmal bei MS SQL-Server, Oracle, MS Access, selbst den derzeit aktuellen Versionen :-)
Wenn Du es wirklich DB-unabhängig haben willst, so nutze einen Querybuilder eines Datenbankabstraktionslayers einer API, der sämtliche existierenden DBMS-Versionen unterstützt.

Freundliche Grüße

Vinzenz