Как мне запросить определенные c данные в таблице A, а затем сравнить поле в A с полем в таблице B? - PullRequest
0 голосов
/ 08 мая 2020

Я новичок в SQL и столкнулся с этой проблемой: я хочу получить все данные из таблицы A при определенных условиях и получить данные из таблицы B на основе того же поля conditon.

Данные, с которыми я работаю, зависят от задания, поэтому я составлю примерную таблицу. Скажем, Таблица A - это таблица красных игральных карт (червы и бубны) с двумя полями:

|-----------+---------|  
| card_id   | type    |  
|-----------+---------|  
|     1     | heart   |
|-----------+---------| 
|     2     | heart   |
|-----------+---------|
|     3     | diamond |
|-----------+---------|  
|     4     | heart   |
|-----------+---------|  

Допустим, таблица B имеет такую ​​же точную структуру, но предназначена для черных игральных карт (трефы и пики).

|-----------+---------|  
| card_id   | type    |  
|-----------+---------|  
|     1     | club    |
|-----------+---------| 
|     2     | spade   |
|-----------+---------|
|     3     | spade   |
|-----------+---------|  
|     4     | club    |
|-----------+---------| 

Теперь предположим, что я хочу выбрать каждую карту в A, которая является сердечком, но всякий раз, когда я нахожу сердечко, я также хочу выбрать все клубы в B.

I представьте, что псевдокод будет примерно таким:

SELECT * FROM tableA a JOIN tableB b  
WHERE a.type = "heart"  
(and if tableA.type = "heart",  
also SELECT * in tableB where type = "club.")

Я бы хотел, чтобы результат был следующим

|-----------+---------|  
| card_id   | type    |  
|-----------+---------|  
|     1     | heart   |
|-----------+---------|  
|     1     | club    |
|-----------+---------| 
|     4     | club    |
|-----------+---------| 
|     2     | heart   |
|-----------+---------|  
|     1     | club    |
|-----------+---------| 
|     4     | club    |
|-----------+---------| 
|     4     | heart   |
|-----------+---------| 
|     1     | club    |
|-----------+---------| 
|     4     | club    |
|-----------+---------| 

Извините, если это простой вопрос, я ничего не могу найти относящиеся к этой c моей проблеме.

1 Ответ

1 голос
/ 08 мая 2020

Вы можете использовать этот запрос для получения желаемых результатов. Требуется UNION всех hearts в tableA с копией каждого из clubs в tableB для каждого heart в tableA. Затем вывод упорядочивается, сначала по card_id из heart, затем по источнику карты (tableA или tableB) и, наконец, по фактическому card_id:

SELECT card_id, type
FROM (
  SELECT 'a' as tbl, card_id AS cid, card_id, type
  FROM tableA
  WHERE type = 'heart'
  UNION ALL
  SELECT 'b', a.card_id, b.card_id, b.type
  FROM tableA a
  JOIN tableB b ON a.type = 'heart' AND b.type = 'club'
) c
ORDER BY cid, tbl, card_id

Вывод:

card_id     type
1           heart
1           club
4           club
2           heart
1           club
4           club
4           heart
1           club
4           club

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...