2015-05-17 2 views
0

У меня есть две таблицы:SQL выполнение запроса с помощью нескольких, взаимосвязанных таблиц

Table A:     Table B: 

SNo Name     SNo Name Std  Talent 

1 Amy     1 Amy  2  Soccer Wonderkid 
2 Andy     2 Andy  3  Street Dance Pro 
3 Ben     3 Asa  4  Kung-Fu Master 
          4 Ben  2  Nerd King 
          5 Chris 4  Hacker Overlord 

Запрос 1: Как выбрать строки в таблице B только для детей, которые имеют запись в таблице А, используя одиночный оператор SQL (при необходимости вложен)?

Запрос 2: Глупый этот, но ответ на запрос 1 будет принят/обработан правильно в JDBC?

+0

Пожалуйста, отметьте ваши вопросы правильно. В какой базе данных вы действительно используете MySQL или SQL Server? –

ответ

1

Я не уверен, что если ключ SNo или Name поэтому запрос будет

SELECT b.* 
FROM tableA a 
LEFT JOIN tableb b 
ON a.name = b.name 

или

SELECT b.* 
FROM tableA a 
LEFT JOIN tableb b 
ON a.sno = b.sno 
+0

Ключ - это имя, любопытно :) так что да, второй вариант был тем, что я искал. Большое спасибо! –

0

Запрос один что-то вроде

SELECT a.name, b.talent from a,b where a.SNo = b.SNo

EDIT: working SQL Fiddle

Это также может быть:

SELECT a.name, b.talent from a,b where a.Name = b.Name

в зависимости от того, что на самом деле ключ для обеих таблиц.

На вопрос 2: Почему бы и нет? JDBC передает любой запрос на ваш сервер и не должен вмешиваться в ваши запросы внутренне.

+0

Нет связи на поле SNo между двумя таблицами – DevelopmentIsMyPassion

+0

@DevelopmentIsMyPassion Что вы подразумеваете под «связью между двумя таблицами» -? –

+0

Я имел в виду не связанную колонкой sno – DevelopmentIsMyPassion

0

Если SNo является первичным ключом,

SELECT * 
FROM B 
WHERE SNo IN (SELECT SNo FROM A) 

Если Name является первичным ключом,

SELECT * 
FROM B 
WHERE Name IN (SELECT Name FROM A)