2016-02-29 17 views
6

Tôi có hai bảng A và B. Bảng A có cột ID, Tên và Giá trị. Trong số các cột khác trong bảng B, có một cột được gọi là IssueID. A.Giá trị có giá trị giống như 'ForSymbol12345' và B.IssueID có các giá trị như '12345'. Tôi có thể tham gia hai bảng này trên một số cột ID trong các bảng tương ứng. Tuy nhiên, tôi chỉ muốn chọn những hàng mà B.IssueID có mặt trong giá trị A.Value. Nói cách khác, B.IssueID là một chuỗi con của A.Value.SQL - Nếu chuỗi trong một cột từ một bảng chứa chuỗi trong cột từ bảng đã tham gia

Nó có thể được thực hiện trong SQL không? Tôi đã thử sử dụng CONTAINS (chuỗi, 'giá trị để tìm kiếm') nhưng dường như tham số thứ hai phải là chuỗi và không thể là tên cột. Tôi đã cố gắng như

CONTAINS(A.Value, B.IssueID) 

Nhưng nó mang lại cho một lỗi nói rằng tham số thứ hai dự kiến ​​sẽ được String, TEXT_LEX hoặc Variable (một ví dụ đơn giản cho thấy dưới đây)

enter link description here

Ai đó có thể giúp tôi hình điều này ra?

+0

Đối với những gì đáng giá, từ khóa CONTAINS không hỗ trợ thông số tìm kiếm động. Bạn phải sử dụng một chuỗi mã hóa cứng. Xem tài liệu: https://msdn.microsoft.com/en-us/library/ms187787.aspx – JDB

Trả lời

5

Sử dụng toán tử LIKE với JOIN.

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

Tôi nên đề cập rằng tôi đang sử dụng SSMS 2008 và CONCAT fn được giới thiệu trong SSMS 2012. Tuy nhiên, tôi đã tìm thấy câu trả lời Ở đây http://stackoverflow.com/a/21702750/3482656 – DotNetNewBie

+2

Chỉnh sửa thứ hai là đúng (tức là câu trả lời gốc của bạn là chính xác) - Tuy nhiên, OP cho biết các bảng tham gia vào các khóa trong các bảng tương ứng cũng như trên kết quả chuỗi con, do đó, 'INNER JOIN' của bạn có lẽ nên nằm trên các phím (chưa đặt tên) này với' LIKE' của bạn trong phép nối với AND hoặc trong mệnh đề 'WHERE'. –

+0

Bạn đã nói "Tôi chỉ muốn chọn những hàng có B.IssueID có trong giá trị A.Value". Vì vậy, B.IssueID là chuỗi con của A.Value. Vì vậy, nó phải là: ON B.IssueID LIKE CONCAT ('%', A.Value, '%') –

2

tùy chọn CONCAT đề cập dưới đây bởi evil333 có thể đã làm việc nhưng tôi đang sử dụng SSMS 2008 và CONCAT đã được giới thiệu trong SSMS năm 2012. Vì vậy, tôi tìm thấy một công việc xung quanh trên đó ở đây

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

Bạn có thể làm điều gì đó như

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

Tôi hy vọng điều này sẽ hữu ích.

+0

Không phải là SSMS 'Sql Server Management Studio'? Nó phải làm gì với các tính năng của SQL Server? –

+1

@LeonardoHerrera - Microsoft phát hành một phiên bản mới của SSMS với mỗi phiên bản của SQL Server. Sự bùng nổ của các số phiên bản có thể khá khó hiểu đối với người mới, nhưng thật an toàn khi nói rằng nếu OP đang sử dụng SSMS 2008, thì phiên bản SQL Server mới nhất mà họ có thể làm việc là SQL Server 2008. – JDB

Các vấn đề liên quan