SQL Server:交叉引用1个表中的多个列,另一个列中有多个列

时间:2015-09-29 13:13:34

标签: sql sql-server inner-join where exists

我有2个表,每个表包含10个整数字段。我需要从table2中检索记录,其中如果table1中的任何一列中存在其中一个字段值。例如;

table examples

因此,如果我有一个包含1的变量(table1中的记录的id),我需要sql来检索记录2&表2中的3表示因为表2中的任何一个猫场都存在3400或3500.希望这是有道理的; - )

2 个答案:

答案 0 :(得分:1)

这可能是最有效的方式,虽然写起来有点麻烦:


import Ember from 'ember';

function initialize() {
  var $ajax = Ember.$.ajax;
  Ember.RSVP.when = function(promise, label) {
    return new Ember.RSVP.Promise(promise.then.bind(promise), label);
  };
  return Ember.$.ajax = function() {
    return Ember.RSVP.when($ajax.apply(Ember.$, arguments), '$.ajax');
  };
};

var PromiseAdapterInitializer = {
  name: 'promise-adapter',
  initialize: initialize
};

export {initialize};
export default PromiseAdapterInitializer;

更重要的是,您的数据结构很糟糕。尝试将多列用作数组通常是SQL中的一个坏主意。您需要每个这样的联结表,其中每个ID和类别有一行。如果你有这样的数据结构,那么查询将更容易编写,并且可能具有更好的性能。

答案 1 :(得分:0)

WITH Table1Ids AS (
    SELECT ID, cat
    FROM Table1
         CROSS APPLY (
             VALUES (cat0), (cat1), (cat2), (cat3), (cat4)
         ) AS CA1(cat)
)
,Table2Ids AS (
    SELECT ID, cat
    FROM Table2
         CROSS APPLY (
             VALUES (cat0), (cat1), (cat2), (cat3), (cat4)
         ) AS CA1(cat)
)
,MatchingRecords AS (
    SELECT DISTINCT Table1Ids.ID AS Table1ID
                   ,Table2Ids.ID AS Table2ID
    FROM Table1Ids
         INNER JOIN Table2Ids
             ON Table2Ids.cat = Table1Ids.cat
)
SELECT Table2.*
FROM MatchingRecords
     INNER JOIN Table2
         ON Table2.ID = MatchingRecords.Table2ID
WHERE MatchingRecords.Table1ID = @TheIDYouAreLookingFor