2013-12-26 3 views
0

Я довольно нового в SQL, и я хочу, чтобы убедиться, что я "м diong все правильно, надеюсь, что вы можете посоветовать мнеSQL запросов - несколько строк для каждого объекта

Допустим, у меня есть объект А и. есть список объектов B. Таким образом, в базе данных у меня есть таблица элементов а и таблицу B и, в этой таблице есть столбец indicationg идентификатор . Например:

A table:   

A id | color  
---------------  
1  | red   
2  | yellow  
3  | green  

B table 

B id | A id 
--------------- 
10  | 1 
11  | 1 
12  | 2 
13  | 3 
14  | 2 
15  | 1         
  1. Я хочу чтобы извлечь все A. Итак, если я использую соединение между A и B, я получу 3 ряда A-1 и буксировочные ряды A-2 и т. д. Я использую только jdbc (нет пружины или jpa), так что я должен взять объединенную таблицу и вручную построить A с помощью java? это нормально?

  2. Если, например, я хочу получить только два А и заказать их по цвету. Будет ли «ограничиваться» тем, насколько это возможно? можете ли вы предложить запрос, который делает это?

EDIT:

То, что я хочу сделать, это получить X A-х (скажем, X = 2) упорядочены по цвету. Поэтому я использую следующий запрос, чтобы объединять обе таблицы:

select * 
from A 
inner join B on A.Aid = B.Aid 
order by A.color 

Это создает следующую таблицу:

B id | A id | color 
    ------------------------ 
    13  | 3  | green 
    15  | 1  | red 
    10  | 1  | red 
    11  | 1  | red 
    12  | 2  | yellow 
    14  | 2  | yellow 

Но я хочу только первые два, а это означает:

B id | A id | color 
    ------------------------ 
    13  | 3  | green 
    15  | 1  | red 
    10  | 1  | red 
    11  | 1  | red 

Первый вопрос: как это сделать?

Второй вопрос: в таблице результатов одиночный Объект (с id = 1) представлен тремя строками, поскольку он имеет три B. В конце концов, я хочу построить список A и отправить его клиенту (в java, используя jdbc), поэтому правильный способ сделать это - перебрать таблицу результатов и построить объекты вручную? В идеальном мире я ожидал бы получить одну строку для каждого объекта A.

Надежда это объяснение clearier ...

+4

Пожалуйста, покажите нам, какие вопросы вы рассматриваете. Кроме того, что вы спрашиваете? –

+0

, пожалуйста, объясните результат в формате таблицы –

+0

Покажите модельный формат вывода, который вы хотите. –

ответ

1

  1. Если предположить, что было больше атрибутов, то только цвет, и вы хотите, чтобы получить их, я буду использовать внутренний выбор, так что SQL-запрос будет выглядеть:

    Пожалуйста, обратите внимание, что будет работать отлично подходит для MySQL и PostgreSQL DB, но если вы используете 0: , вам нужно будет использовать TOP и в Oracle вам нужно будет обернуть его другим выбором и использовать ROWNUM (rownum работает до заказа by oracle).

Это пример MySQL:

SELECT A.id, A.color, B.id 
FROM A join B on A.id = B.A_id 
WHERE A.id IN (SELECT id FROM A ORDER BY color LIMIT 2) 
ORDER BY A.id 
  1. Да, вам придется идти по рядам и создать, если это новый А или создать только новый экземпляр B и добавить его в существующий экземпляр A. (я буду использовать Set для этого)
+0

Но если это немного сложнее ... например, я создаю таблицу, которая не содержит всех идентификаторов A, и я хочу взять только первые X A из нее? Поэтому в этом случае я не могу делать «WHERE A.id IN (SELECT id FROM ORDER BY color LIMIT 2)», мне нужно сделать что-то вроде: «WHERE A.id IN (SELECT id из созданной таблицы ORDER BY color LIMIT 2) « –

+0

Использование созданной таблицы во внутреннем элементе будет работать без проблем. Если temp_table - это таблица на основе A, вы также можете поместить фильтры во Внутренний выбор. – asafm

0

Вы можете использовать LIMIT и ORDER BY команда

0
  1. Вы действительно получите 3 ряда A-1 и буксирные ряды A-2 и т.д. Вы может создать ваши A (и B) this site has some good examples, как это сделать.

  2. Я не думаю, что вы могли бы использовать команду LIMIT, вместо этого просто используйте предложение WHERE, например: WHERE color IN ('red','green'). Затем вы можете заказать их с помощью ORDER BY COLOR.

+0

Red \ green - это всего лишь пример ... он мог бы иметь свободный текст, который я бы хотел отсортировать по нему и получить только первые два A. –

+0

Затем вы можете заменить красный и зеленый параметры. –

Смежные вопросы