2013-07-14 2 views
1

У меня есть 2 SQL таблицы первая таблица называется обработаннаяSQL Как условие

relatedorders (type in nvarchar) 
132,112,144,155 
116,113 
11,44,15,16 

и второй таблицы называется заказов и выглядит как

orderid (type int) 
132 
112 
155 
116 

Я хочу, чтобы выбрать OrderID из таблицы заказов, где OrderID существует в связанных журналах в обработанном столе

Я попытался что-то вроде

SELECT * 
FROM orders 
WHERE EXISTS(SELECT relatedorders 
      from processed 
      where orders.orderid like %relatedorders %) 

но, похоже, он не работает должным образом, что я делаю неправильно?

+1

Вы должны использовать таблицу соединений, не сохраняя значения в виде разделенного запятыми текста в одном столбце. Даже если бы это сработало, у вас возникнут проблемы с значениями, разделенными запятыми, так как, например, вы бы не соответствовали «1116», но должны соответствовать «116, ...», «..., 116, ... 'и' ..., 116'. – tvanfosson

+0

@tvanfosson, поэтому нет простого способа сопоставления, отличного от отдельного стола? и о производительности будет ли отдельная таблица работать быстрее? – user2490355

+1

Я думаю, что это будет быстрее во всех случаях, но с соответствующими индексами это будет * намного быстрее, так как вы не будете подвергать сканирование таблицы. – tvanfosson

ответ

3

Правильный способ моделировать это с отношением «один ко многим» через стол . Добавьте еще одну таблицу, возможно, называемую ProcessedRelatedOrders, содержащую идентификатор заказа и идентификатор связанного порядка, по одной строке для каждой связи. Вы, скорее всего, захотите. Используйте оба столбца в качестве первичного ключа. Индекс первичного ключа должен позволять быстро искать соединение с обработанным порядком.

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