2015-05-13 2 views
0

я есть студент и тренер таблицы:У меня есть два стола ученика и тренера. я хочу, чтобы получить значения от студента и тренер таблицы на основе некоторого условия

студент стол:

student_id (primary key)  
name  
email  

тренер стол:

trainer_id  
student_id  
amount 

мощность имеет чтобы:

sid name email amount 
22 ram [email protected] 200 
34 sam [email protected] 

я хочу, чтобы получить (student_id, имя, адрес электронной почты) от студента таблицы и (количество) от тренера таблицы (имп: trainer_id и student_id должны совпадать (например, SID = 46, TID = 78, сумма = 500), то только значение должно отображать значение. в противном случае сумма будет отображаться пустой, но (student_id, имя, адрес электронной почты) должно отображаться)

в таблице тренера, student_id и trainer_id должны совпадать ... на основе этой суммы придет .. означает, что мы отправляем запрос выбора как «выберите количество от тренера, где student_id = 20 и trainer_id = 36 ...». что столбец должен соответствовать для Сида и TID

+0

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

+0

Каковы ваши условия? – Darian

+0

в ** тренере ** таблица, student_id и trainer_id должны совпадать ... на основе этой ** суммы ** придет .. я имею в виду, если мы отправим запрос выбора как «выберите сумму от тренера, где student_id = 20 и trainer_id = 36 ... ". эта колонка должна соответствовать для sid и tid –

ответ

0

Если вы делаете это таким образом, это точна не показывают данные, если количество пусто:

select st.student_id, 
    st.name, 
    st.email, 
    tt.amount 
from student_table st, trainer_table tt 
where st.student_id = tt.student_id 

функция NVL позволяет заменить значение, когда нулевое значение встречаются, , так что если вы делаете это таким образом, это Виль показать данные и показать 0 вместо NULL:

select st.student_id, 
    st.name, 
    st.email, 
    (nvl(select tt.amount 
     from trainer_table tt 
     where st.student_id = tt.student_id,0))) amount 
from student_table st 
0

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

DECLARE 
    TYPE result_record IS RECORD 
    (sid NUMBER 
    , name VARCHAR2(60) 
    , email VARCHAR2(60) 
    , amount NUMBER); 
    CURSOR c IS select st.student_id sid, 
st.name name, 
st.email email, 
tt.amount amount 
from student_table st, trainer_table tt 
where st.student_id = tt.student_id; 

    TYPE results_table IS TABLE OF results_record INDEX BY BINARY_INTEGER; 

    c_rec c%ROWTYPE; 

    temp_rec RESULTS_RECORD; 
    results RESULTS_TABLE; 
    lv_index NUMBER := 0; 

BEGIN 
    OPEN c; 
    WHILE lv_index <= c%ROWCOUNT LOOP 
    FETCH c INTO c_rec; 
    temp_rec.sid := c_rec.sid; 
    temp_rec.name := c_rec.name; 
    temp_rec.email := c_rec.email; 
    temp_rec.amount := c_rec.amount; 
    results(lv_index) := temp_rec; 
    lv_index := lv_index + 1; 
    END LOOP; 
    CLOSE c; 
    -- Now we can access and modify our table from inside PLSQL 
    SELECT * FROM results; 
    -- Use PLSQL logic to make the table output pretty with '$' and conditionals 
    FOR i IN results LOOP 
    dbms_output.put_line(i.sid||' $'||i.amount); -- example for how to access 
    -- your code here 
    END LOOP; 
END; 
/

Как всегда, я надеюсь, что это даст вам некоторые идеи.

-V

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

  • Нет связанных вопросов^_^