Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Нуждаете се от помощ за конструиране на заявка:съединете множество таблици в един ред

Мисля, че го опростихте твърде много някъде. Заявката, която цитирате, ще върне точно това, което вече искате. Ето един пример (избирането от една таблица два пъти дава ситуация, подобна на тази, която имате)

mysql> select * from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
+------+------+------+------+
| a    | b    | a    | b    |
+------+------+------+------+
|    1 |    2 |    1 |    1 | 
|    1 |    1 |    1 |    2 | 
|    1 |    2 |    1 |    2 | 
|    2 |    2 |    2 |    2 | 
|    2 |    2 |    2 |    2 | 
+------+------+------+------+
5 rows in set (0.00 sec)

Mysql няма проблем да обозначава колоните с резултати с едни и същи етикети. Предполагам, че първоначалната ви заявка е имала select t1.* в избраната част.

Ако искате да се обърнете към отделни полета, чиито имена са двусмислени, ще получите

mysql> select a from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
ERROR 1052 (23000): Column 'a' in field list is ambiguous

И трябва да посочите точно какво искате (псевдонимите на колони не са задължителни, можете да направите t1., t2. също)

mysql> select t1.a first, t2.a second from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
+-------+--------+
| first | second |
+-------+--------+
|     1 |      1 | 
|     1 |      1 | 
|     1 |      1 | 
|     2 |      2 | 
|     2 |      2 | 
+-------+--------+
5 rows in set (0.00 sec)

Редактиране 22MARСлед промяна в примерните данни изглежда, че искате да превърнете няколко реда от една таблица в една. Ето конкретно решение (ако приемем, че винаги ще имате редове за данък, обща сума и междинна сума и че се интересувате само от тях редове).

SELECT t1.id, t1.name, t2.product_id, t2.price, t3a.number subtotal, t3b.number total, t3c.number tax
FROM `table_one` AS t1 
INNER JOIN `table_two` AS t2 ON t1.id = t2.id 
INNER JOIN `table_three` AS t3a ON t1.id = t3a.id and t3a.text = "Subtotal"
INNER JOIN `table_three` AS t3b on t3a.id = t3b.id and t3b.text = "Total"
INNER JOIN `table_three` AS t3c on t3b.id = t3c.id and t3c.text = "Tax"

(ако искате, можете също да изберете константи „Данък“, „Общо“ и „Междинна сума“ в избраната част и да им дадете имена на колони)

Едно нещо, което остава неясно, е връзката между идентификаторите в таблиците - първичен ключ ли са на table_one или table_two. Това може да повлияе на резултатите, разбира се, когато имате няколко реда в table_one и table_two.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да получа уникални стойности от таблицата с данни с помощта на dql?

  2. MySQL (5.7) премахва съхранените процедури чрез mysql.proc

  3. ASP.net 4.0 Модел на данни за обект Mysql не третира Mysql Enums правилно

  4. Съхранени процедури, MySQL и PHP

  5. Вмъкване/актуализиране на помощна функция с помощта на PDO