Подтвердить что ты не робот

Выбрать из нескольких таблиц без соединения?

Что является самым простым способом выбора данных из двух таблиц и вместо их объединения, они отображаются как отдельные строки. Обе таблицы имеют похожие или совпадающие поля, и я хочу запустить на них некоторую совокупную функцию, такую ​​как avg все строки, которые произошли в том же месяце, из обеих таблиц.

Например, у меня есть две таблицы, одна из которых показывает транзакции из одной системы и другую с транзакциями из другой системы. Есть ли способ захватить все транзакции из обеих таблиц в виде отдельных строк? если в таблице 1 было двадцать записей, а в таблице 2 было тридцать записей, я бы хотел, чтобы их было 50 строк.

4b9b3361

Ответ 1

Вы можете попробовать что-то вроде этого:

SELECT f1,f2,f3 FROM table1
UNION
SELECT f1,f2,f3 FROM table2

Ответ 2

Оператор UNION ALL может быть тем, что вы ищете.

С помощью этого оператора вы можете объединить результаты из нескольких запросов вместе, сохраняя все строки из каждого. Обратите внимание, что оператор UNION (без ключевого слова ALL) устранит любые "повторяющиеся" строки, которые существуют в наборе результатов. Оператор UNION ALL сохраняет все строки из каждого запроса (и, скорее всего, будет работать лучше, поскольку у него нет накладных расходов на выполнение операции повторной проверки и удаления).

Количество столбцов и тип данных каждого столбца должны совпадать в каждом запросе. Если один из запросов имеет больше столбцов, чем другой, мы иногда включаем фиктивные выражения в другом запросе, чтобы сделать столбцы и типы данных "соответствующими". Часто полезно включить выражение (дополнительный столбец) в список SELECT каждого запроса, который возвращает литерал, чтобы указать, какой из запросов был "источником" строки.

SELECT 'q1' AS source, a, b, c, d FROM t1 WHERE ...
UNION ALL
SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2 JOIN t3 ON ...
UNION ALL
SELECT 'q3', '1', '2', buckle, my_shoe FROM t4

Вы можете обернуть такой запрос в виде набора скобок и использовать его как встроенное представление (или "производную таблицу" в MySQL lingo), чтобы вы могли выполнять агрегированные операции во всех строках.

SELECT t.a
     , SUM(t.b)
     , AVG(t.c)
  FROM (
         SELECT 'q1' AS source, a, b, c, d FROM t1
          UNION ALL
         SELECT 'q2', t2.fee, t2.fi, t2.fo, 'fum' FROM t2
       ) t
 GROUP BY t.a
 ORDER BY t.a

Ответ 3

Вы можете попробовать эту ноту:

SELECT * from table1,table2 

Более сложный:

SELECT table1.field1,table1.field2, table2.field3,table2.field8 from table1,table2 where table1.field2 = something and table2.field3 = somethingelse

Ответ 4

Если у вас был вопрос: выберите ename, dname FROM emp, dept без использования объединений.

Тогда я бы сделал это...

SELECT ename, (SELECT dname 
FROM dept
WHERE dept.deptno=emp.deptno)dname
FROM EMP

Вывод:

ENAME      DNAME
---------- --------------
SMITH      RESEARCH
ALLEN      SALES
WARD       SALES
JONES      RESEARCH
MARTIN     SALES
BLAKE      SALES
CLARK      ACCOUNTING
SCOTT      RESEARCH
KING       ACCOUNTING
TURNER     SALES
ADAMS      RESEARCH

ENAME      DNAME
---------- --------------
JAMES      SALES
FORD       RESEARCH
MILLER     ACCOUNTING

14 rows selected.

Ответ 5

Вы должны попробовать это

 SELECT t1.*,t2.* FROM t1,t2

Ответ 6

В этом случае мы предполагаем, что у нас есть две таблицы: SMPPMsgLog и SMSService с общим столбцом serviceid:

SELECT sp.SMS,ss.CMD 
FROM vas.SMPPMsgLog AS sp,vas.SMSService AS ss 
WHERE sp.serviceid=5431 
AND ss.ServiceID = 5431 
AND Receiver ="232700000" 
AND date(TimeStamp) <='2013-08-07' 
AND date(TimeStamp) >='2013-08-06' \G;