2013-04-08 3 views
0

У меня есть проблема с запросом в этом примере:MySQL INNER JOIN ошибку в ИНЕКЕ

SELECT pm.name, 
     pm.pre_id, 
     pm.pgs_id, 
     pm.link, 
     pm.del, 
     pm.maz_kaina, 
     pm.int_kaina, 
     pm.d1_kaina, 
     pm.d2_kaina, 
     pm.d3_kaina, 
     pm.pvm, 
     pm.vnt, 
     pm.gamintojas, 
     pm.akcija, 
     pm.akc_kaina 
FROM `prekes_main` AS pm 
     INNER JOIN (SELECT charak_pre.pr_id 
        FROM charak_pre 
        WHERE charak_pre.cha_id = 206 
          AND charak_pre.reiksme = 'Parfumuotas vanduo' 
          AND charak_pre.pr_id = pm.pre_id) AS reikiamos_pre0 
       ON reikiamos_pre0.pr_id = pm.pre_id 
WHERE pm.pgs_id = '2431' 
ORDER BY pm.del DESC, 
      int_kaina ASC 
LIMIT 0, 18 

У меня проблема в INNER JOIN, когда я пытаюсь выполнить это. Это ошибка, которую я получил:

SQL Error (1054): Unknown column 'pm.pr_id' in WHERE clause. 

Место, где происходит ошибка: and charak_pre.pr_id = pm.pr_id. С этим я хочу выбрать строку из таблицы charak_pre, которая равна prekes_main row ключами charak_pre.pr_id и prekes_main.pre_id.

+0

В SELECT в паратетезе у вас есть только FROM charak_pre. рт нигде не определено, поэтому ошибка –

ответ

0

Я бы написать без подзапроса, кажется неэффективным, что нужно сделать, но я не проверял. Сделайте обычное соединение:

SELECT pm.name, 
     pm.pre_id, 
     pm.pgs_id, 
     pm.link, 
     pm.del, 
     pm.maz_kaina, 
     pm.int_kaina, 
     pm.d1_kaina, 
     pm.d2_kaina, 
     pm.d3_kaina, 
     pm.pvm, 
     pm.vnt, 
     pm.gamintojas, 
     pm.akcija, 
     pm.akc_kaina 
FROM `prekes_main` as pm 
     INNER JOIN charak_pre charak_pre as reikiamos_pre0 
      ON reikiamos_pre0.pr_id = pm.pre_id AND charak_pre.cha_id = 206 and 
        charak_pre.reiksme = 'Parfumuotas vanduo' 
WHERE pm.pgs_id = '2431' 
ORDER BY pm.del DESC, 
     int_kaina ASC 
LIMIT 0,18 
0

Фактически вы можете сделать это без подзапроса, потому что вы не выполняете агрегирование в следующих строках. Но вместо этого прямо соедините его с таблицей charak_pre и поставьте другое условие на предложение WHERE.

SELECT DISTINCT pm.* 
FROM prekes_main as pm 
     INNER JOIN charak_pre 
      ON charak_pre.pr_id = pm.pre_id 
WHERE pm.pgs_id = '2431' AND 
     charak_pre.cha_id = 206 AND 
     charak_pre.reiksme = 'Parfumuotas vanduo' 
ORDER BY pm.del DESC, int_kaina ASC 
LIMIT 0, 18 
+0

чем этот запрос 'ВЫБРАТЬ charak_pre.pr_id FROM charak_pre WHERE charak_pre.cha_id = 206 и charak_pre.reiksme =«Parfumuotas vanduo'', возвращать не один результат, она возвращает около 5000 +, поэтому JOIN слишком медленно с этим –

+0

как насчет обновленного? –

+0

Хм, может быть, это плохо, что вы не знаете структуру таблицы. 'prekes_main' имеют только одну строку с' pre_id', но 'charak_pre' имеют более одной переменной pr_id равным pre_id в prekes_main, так что запрос вернет более одной строки продукта –