SQL-запрос для выбора из нескольких таблиц в одной базе данных
У меня 3 таблицы (c19
, c19b2
, g26
) в базе данных
Я хочу написать запрос SQL для поиска и отображения всех полей сопоставленной записи.
Я использую следующий запрос:
$query = "SELECT * FROM c19,c19b2,g26 WHERE armyno LIKE '%$searchTerm%'";
Но это работает только для таблицы c19
, Данные из двух других таблиц не выбираются. Каждая таблица имеет поле armyno
Пожалуйста, помогите мне с этим Спасибо.
2 ответа
Хорошо, вы не ищете JOIN
, но UNION
,
SELECT * FROM c19 WHERE armyno LIKE '%$searchTerm%'
UNION
SELECT * FROM c19b2 WHERE armyno LIKE '%$searchTerm%'
UNION
SELECT * FROM g26 WHERE armyno LIKE '%$searchTerm%'
Это позволит вам запрашивать все три таблицы одновременно.
Какую БД вы используете? Это работало бы в SQL Server. Тем не менее, обратите внимание, что вы делаете перекрестное соединение каждой записи с каждой записью... обычно вы хотите сопоставить некоторые записи только путем ограничения соответствующего ключа, например:
select
*
from a
left join b on b.somekey = a.somekey
left join c on c.someotherkey = b.someotherkey
В SQL-сервере вы можете просто сказать *, но я понимаю, что в вашей машине БД это не сработало, поэтому попробуйте указать, какую таблицу. Это может также потребоваться в некоторых средах:
select
a.*,
b.*,
c.*
from tableA as a
left join tableB as b on b.somekey = a.somekey
left join tableC as c on c.someotherkey = b.someotherkey
Как правило, вы должны увидеть столбцы из первой таблицы, затем столбцы из второй таблицы, а затем столбцы из третьей таблицы для данной строки. Если вы хотите получить все столбцы из всех таблиц, но отдельно, то это будет 3 отдельных выбора.
Наконец, если все 3 таблицы имеют "armyno", то я ожидаю, что это вызовет неоднозначную ошибку поля. В этом случае вы захотите указать, какое поле таблицы "armyno" фильтровать.