2012-03-01 4 views
0

То, что я пытаюсь сделать, это sub.blockid=id с JOIN. Я переименовал blockid в id в подзапрос, но ключевое слово USING по-прежнему прикрепляет столбец id вместо переименованного столбца (blockid) из таблицы подписки.Mysql USING переименовать столбец

$subscribequery = "JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
    USING (id)"; 

Это было бы легко с ON, но у меня есть другие РЕГИСТРИРУЙТЕСЬ подзапросы с ИСПОЛЬЗОВАНИЕМ. Я получаю столбец неоднозначной ошибкой, если я пытаюсь использовать ON вместо USING вместе с другими подзапросами.

Можете ли вы использовать как USING, так и ON в том же запросе? Могу ли я переименовать столбец, как я попытался выше?

Вот полный запрос. Преступником является второй запрос JOIN.

SELECT * FROM products 
JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1 
     USING (nid, sid) 
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
     USING (id) 
WHERE id = subid AND name = max_name AND pending='0' AND deleted='0' 
ORDER BY subid DESC, nid DESC; 

ответ

1

Чтобы уточнить, вы на самом деле не переименовываете какие-либо столбцы, просто накладывая их на них. И да, поскольку вы используете подзапрос, вы можете использовать псевдоним столбца в предложении ON или USING внутри внешнего запроса.

Я рекомендую использовать ON вместо USING и просто указать, в какой таблице или подзапросе каждый столбец ссылается, используя либо имя таблицы, либо псевдоним таблицы.

Использование ON и указание того, какая таблица, на которую вы ссылаетесь, также делает ваш код более читаемым, особенно учитывая, что вы используете несколько соединений.

Вот пример, используя запрос:

JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1 
     ON at1.nid = products.nid and at1.sid = products.sid 
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
     ON sub.id = products.id 
Смежные вопросы