Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос по SQL от начинающего...
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Вопрос по SQL от начинающего...

Страниц (1): [1]
 

1. Arhontsl - 21 Февраля, 2017 - 21:46:32 - перейти к сообщению
Здравствуйте, уважаемые форумчане!

Изучаю SQL, извините за, возможно, глупые вопросы..

Есть две таблицы. На выходе должна получиться третья.


https://docs[dot]google[dot]com/spreadsh[dot][dot][dot]edit?usp=sharing

Я понимаю, что нужно копать в сторону объединений. У меня даже получается по-отдельности вывести нужные данные (синтаксис MySQL).

CODE (sql):
скопировать код в буфер обмена
  1. SELECT `mu_id`,`mu_direction_give`,`curr_name` FROM `mark_ups` JOIN `currency` ON `curr_id`=`mu_direction_give` ORDER BY `mu_id`;
  2. SELECT `mu_id`,`mu_direction_get`,`curr_name` FROM `mark_ups` JOIN `currency` ON `curr_id`=`mu_direction_get` ORDER BY `mu_id`;
  3.  


Но все же конечного результата не могу достичь. Помогите, пожалуйста, кто опытный.
(Добавление)
Все-таки родил такое решение

CODE (sql):
скопировать код в буфер обмена
  1.  
  2. SELECT T1.`curr_name`, T2.`curr_name`, T1.`mark_up_cnt` FROM (SELECT `mu_id`,`mu_direction_give`,`curr_name`, `mark_up_cnt` FROM `mark_ups` JOIN `currency` ON `curr_id`=`mu_direction_give` ORDER BY `mu_id`) T1, (SELECT `mu_id`,`mu_direction_get`,`curr_name` FROM `mark_ups` JOIN `currency` ON `curr_id`=`mu_direction_get` ORDER BY `mu_id`) T2 WHERE T1.`mu_id`=T2.`mu_id`;
  3.  


Покритикуйте, пожалуйста, насколько оно рациональное.
2. Arhontsl - 28 Февраля, 2017 - 11:05:55 - перейти к сообщению
Не понимаю, никто не может покритиковать мой вариант? По-моему там не очень рационально. И синтаксически и с точки зрения скорости обработки.
3. Мелкий - 28 Февраля, 2017 - 11:37:12 - перейти к сообщению
В вопросе отсутствуют исходные данные. А ходить по всяким гуглодокам желания нет.

Фокус в присоединении одной и той же таблицы-справочника несколько раз лишь в том, чтобы раздать алиасы.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `mu_id`,`mu_direction_give`, dgive.`curr_name`, dget.`curr_name`
  2. FROM `mark_ups`
  3. JOIN `currency` AS dgive ON dgive.`curr_id`=`mu_direction_give`
  4. JOIN `currency` AS dget ON dget.`curr_id`=`mu_direction_get`
  5. ORDER BY `mu_id`;
4. Arhontsl - 03 Марта, 2017 - 19:16:16 - перейти к сообщению
Мелкий пишет:
В вопросе отсутствуют исходные данные. А ходить по всяким гуглодокам желания нет.


А что плохого в ссылке на google-таблицу? Ведь это гораздо удобнее, чем излагать эти самые данные в теме. Таким образом я проявляю уважение к пользователям форума, предоставляя информацию в удобной форме. Или лучше чтобы я неаккуратно вставил сюда просто текстом или картинкой (из которой ничего нельзя скопировать)?

Но спасибо за ответ.
5. Мелкий - 03 Марта, 2017 - 20:45:24 - перейти к сообщению
Я ответил за себя лично, мнение может не совпадать с другими участниками.
Картинки для текстовых данных неприемлемы. Отформатировать таблицу такого плана проблемы не составляет в моноширинном виде, из дефолтного клиента mysql копируется и всё. Хороший вариант оформления - DDL запросы создания минимального окружения и описание желаемого результата. Способ позволяет и быстро скопировать-поиграться с локальной базой и не представляет трудности при чтении с минимальным выравниванием.

По мотивам:
Цитата:
Пример в SQL Fiddle улучшает вопрос, но не является достаточным сам по себе.

 

Powered by ExBB FM 1.0 RC1