2013-02-25 3 views
0

У меня есть 2 запроса, которые работают отдельно, но не могут понять, как их объединить в один.Внутренние соединения MYSQL и производные таблицы

Первый вычисляет наличие куска завода, например, так:

SELECT *, 
(off_time - on_time)/(UNIX_TIMESTAMP('x') - UNIX_TIMESTAMP('y')) AS A 
FROM(
SELECT equipment_id, 
    IF(time_on < 'x', UNIX_TIMESTAMP('x'), UNIX_TIMESTAMP(time_on)) AS on_time, 
    (CASE 
    WHEN (time_off IS NULL) THEN UNIX_TIMESTAMP(NOW()) 
    WHEN (time_off > 'y') THEN UNIX_TIMESTAMP('y') 
    ELSE UNIX_TIMESTAMP(time_off) 
    END) AS off_time 
    FROM r) AS T 
GROUP BY equipment_id 

Но я только хочу, чтобы показать растение идентифицированный как для службы, которая хранится в отдельной таблице, так что я полагаю, что я есть использовать JOIN, что-то вроде:

SELECT r.equipment_id, r.time_on, r.time_off, i.in_service 
FROM r 
INNER JOIN i 
ON r.equipment_id=i.equipment_id 

Однако мои попытки совместить два результата приводят к сбою. Я самоучтен и очень новичок в этом, поэтому любая помощь, комментарии или даже некоторые критические замечания по моим запросам приветствуются.

ответ

1

Ну, вы можете присоединиться к нему так.

SELECT 
    *, 
    ((off_time - on_time)/(UNIX_TIMESTAMP('x') - UNIX_TIMESTAMP('y'))) AS A 
FROM (SELECT 
    r.equipment_id, 
    i.in_service, 
    IF(time_on < 'x', UNIX_TIMESTAMP('x'), UNIX_TIMESTAMP(time_on)) AS on_time, 
    (CASE WHEN (time_off IS NULL) THEN UNIX_TIMESTAMP(NOW()) WHEN (time_off > 'y') THEN UNIX_TIMESTAMP('y') ELSE UNIX_TIMESTAMP(time_off) END) AS off_time 
     FROM r 
    left join i 
     ON r.equipment_id = i.equipment_id) AS T 
GROUP BY equipment_id 
+0

Как с предложением Minesh, я получаю сообщение об ошибке (1052) Колонка «equipment_id» в списке полей неоднозначно , Спасибо, что нашли время :) – xgstr

+0

@xgstr Я отредактировал, что ты можешь снова проверить –

+0

Блестяще, большое спасибо, боролся с этим все утро! :) – xgstr

0

Если я правильно понимаю ваш вопрос, ниже является SQL вы ищете:

SELECT *, 
(off_time - on_time)/(UNIX_TIMESTAMP('x') - UNIX_TIMESTAMP('y')) AS A, i.in_service 
FROM(
SELECT equipment_id, 
    IF(time_on < 'x', UNIX_TIMESTAMP('x'), UNIX_TIMESTAMP(time_on)) AS on_time, 
    (CASE 
    WHEN (time_off IS NULL) THEN UNIX_TIMESTAMP(NOW()) 
    WHEN (time_off > 'y') THEN UNIX_TIMESTAMP('y') 
    ELSE UNIX_TIMESTAMP(time_off) 
    END) AS off_time 
    FROM r) AS T 
INNER JOIN i 
ON T.equipment_id=i.equipment_id 
GROUP BY T.equipment_id 
+0

Спасибо Minesh, но это дает мне ошибку (1052) Column 'equipment_id' в списке полей неоднозначно, на самом деле не понимаю, что это значит. – xgstr

+0

исправил это, вам нужно использовать псевдоним таблицы в разделе «Помещение по группе» – Minesh

+0

Я получаю тот же список полей, что и неоднозначная ошибка. – xgstr

Смежные вопросы