2016-02-29 15 views
6

Mam dwie tabele A i B. Tabela A zawiera identyfikator kolumny, nazwę i wartość. Wśród innych kolumn w tabeli B znajduje się kolumna IssueID. A.Value ma wartości podobne do "ForSymbol12345", a B.IssueID ma wartości takie jak "12345". Jestem w stanie połączyć te dwie tabele na niektórych kolumnach ID w odpowiednich tabelach. Jednak chcę tylko wybrać te wiersze, w których B.IssueID występuje w wartości A.Value. Innymi słowy, B.IssueID jest podłańcuchem A.Value.SQL - jeśli ciąg w kolumnie z jednej tabeli zawiera ciąg w kolumnie z połączonej tabeli

Czy można to zrobić w SQL? Próbowałem użyć CONTAINS (ciąg znaków, "wartość do wyszukania"), ale najwyraźniej drugi parametr musi być łańcuchem i nie może być nazwą kolumny. Próbowałem jak

CONTAINS(A.Value, B.IssueID) 

Ale daje błąd mówiący drugi parametr ma być String TEXT_LEX lub zmienna (uproszczony przykład pokazujący tym poniżej)

enter link description here

może ktoś mi pomóc rysunek to na zewnątrz?

+0

Co jest warte, słowo kluczowe CONTAINS nie obsługuje dynamicznego parametru wyszukiwania. Musisz użyć zakodowanego ciągu znaków. Zobacz dokumentację: https://msdn.microsoft.com/en-us/library/ms187787.aspx – JDB

Odpowiedz

5

Użyj operatora LIKE z JOIN.

SELECT A.*, B.* 
FROM A 
INNER JOIN B 
ON A.Value LIKE CONCAT('%', B.IssueID, '%') 
+0

Powinienem wspomnieć, że używam SSMS 2008, a CONCAT fn został wprowadzony w SSMS 2012. Jednak znalazłem odpowiedź tutaj http://stackoverflow.com/a/21702750/3482656 – DotNetNewBie

+2

Druga edycja jest prawidłowa (tj. oryginalna odpowiedź była prawidłowa) - jednak OP mówi, że tabele łączą się z kluczami w odpowiednich tabelach, jak również w dopasowaniu podciągu, więc twoje 'INNER JOIN' powinno prawdopodobnie znajdować się na tych (nienazwanych) kluczach z twoim' LIKE' w złączeniu z AND lub w klauzuli "WHERE". –

+0

Powiedziałeś "Chcę tylko wybrać te wiersze, w których B.IssueID jest obecny w A.Value value". Więc B.IssueID jest podciągu A.Value. Powinno być: ON B.IssueID LIKE CONCAT ('%', A.Value, '%') –

2

opcja CONCAT wymienione poniżej evil333 mógł działało, ale używam SSMS 2008 i CONCAT został wprowadzony w SSMS 2012. Tak, znalazłem pracę wokół na ten temat tutaj

https://stackoverflow.com/a/21702750/3482656

You mogę zrobić coś takiego, jak

A.value like '%' + cast(B.IssueID as varchar) + '%' 

Mam nadzieję, że to pomoże.

+0

Czy nie jest SSMS "Sql Server Management Studio"? Co to ma wspólnego z funkcjami SQL Server? –

+1

@LeonardoHerrera - Microsoft wydaje nową wersję SSMS dla każdej wersji SQL Server. Podmuch numerów wersji może być dość mylący dla początkujących, ale można bezpiecznie powiedzieć, że jeśli OP używa SSMS 2008, to najnowszą wersją SQL Servera, z którym mógłby pracować jest SQL Server 2008. – JDB

Powiązane problemy