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" фильтровать.

Другие вопросы по тегам