SQL Server - Join only when the condition is number
I have a table EmployeeLeave
CREATE TABLE EmployeeLeave (
EmployeeId INT,
LeaveType VARCHAR()
);
LeaveType can have numbers as well as string.
CREATE TABLE MST_LeaveReason (
ReasonId INT,
Reason VARCHAR()
);
SELECT * FROM EmployeeLeave EL
LEFT JOIN MST_LeaveReason LR ON LR.ReasonId = EL.LeaveType
Above query will not work as LeaveType is not always number. I want this join to work only if the LeaveType is number. How can i implement it. Please help.
Thanks in advance.
sql sql-server join
add a comment |
I have a table EmployeeLeave
CREATE TABLE EmployeeLeave (
EmployeeId INT,
LeaveType VARCHAR()
);
LeaveType can have numbers as well as string.
CREATE TABLE MST_LeaveReason (
ReasonId INT,
Reason VARCHAR()
);
SELECT * FROM EmployeeLeave EL
LEFT JOIN MST_LeaveReason LR ON LR.ReasonId = EL.LeaveType
Above query will not work as LeaveType is not always number. I want this join to work only if the LeaveType is number. How can i implement it. Please help.
Thanks in advance.
sql sql-server join
If yourvarchar
is only going to have a length of 1, why not usechar(1)
and save the overhead of having a "variable" length?
– Larnu
Nov 22 '18 at 11:48
@Larnu:VARCHAR()
is (fortunately?) not legal syntax. It's probably not shorthand forVARCHAR
-with-no-length-which-is-implicitly-1 in this case.
– Jeroen Mostert
Nov 22 '18 at 11:51
add a comment |
I have a table EmployeeLeave
CREATE TABLE EmployeeLeave (
EmployeeId INT,
LeaveType VARCHAR()
);
LeaveType can have numbers as well as string.
CREATE TABLE MST_LeaveReason (
ReasonId INT,
Reason VARCHAR()
);
SELECT * FROM EmployeeLeave EL
LEFT JOIN MST_LeaveReason LR ON LR.ReasonId = EL.LeaveType
Above query will not work as LeaveType is not always number. I want this join to work only if the LeaveType is number. How can i implement it. Please help.
Thanks in advance.
sql sql-server join
I have a table EmployeeLeave
CREATE TABLE EmployeeLeave (
EmployeeId INT,
LeaveType VARCHAR()
);
LeaveType can have numbers as well as string.
CREATE TABLE MST_LeaveReason (
ReasonId INT,
Reason VARCHAR()
);
SELECT * FROM EmployeeLeave EL
LEFT JOIN MST_LeaveReason LR ON LR.ReasonId = EL.LeaveType
Above query will not work as LeaveType is not always number. I want this join to work only if the LeaveType is number. How can i implement it. Please help.
Thanks in advance.
sql sql-server join
sql sql-server join
asked Nov 22 '18 at 11:46
ErmaErma
104313
104313
If yourvarchar
is only going to have a length of 1, why not usechar(1)
and save the overhead of having a "variable" length?
– Larnu
Nov 22 '18 at 11:48
@Larnu:VARCHAR()
is (fortunately?) not legal syntax. It's probably not shorthand forVARCHAR
-with-no-length-which-is-implicitly-1 in this case.
– Jeroen Mostert
Nov 22 '18 at 11:51
add a comment |
If yourvarchar
is only going to have a length of 1, why not usechar(1)
and save the overhead of having a "variable" length?
– Larnu
Nov 22 '18 at 11:48
@Larnu:VARCHAR()
is (fortunately?) not legal syntax. It's probably not shorthand forVARCHAR
-with-no-length-which-is-implicitly-1 in this case.
– Jeroen Mostert
Nov 22 '18 at 11:51
If your
varchar
is only going to have a length of 1, why not use char(1)
and save the overhead of having a "variable" length?– Larnu
Nov 22 '18 at 11:48
If your
varchar
is only going to have a length of 1, why not use char(1)
and save the overhead of having a "variable" length?– Larnu
Nov 22 '18 at 11:48
@Larnu:
VARCHAR()
is (fortunately?) not legal syntax. It's probably not shorthand for VARCHAR
-with-no-length-which-is-implicitly-1 in this case.– Jeroen Mostert
Nov 22 '18 at 11:51
@Larnu:
VARCHAR()
is (fortunately?) not legal syntax. It's probably not shorthand for VARCHAR
-with-no-length-which-is-implicitly-1 in this case.– Jeroen Mostert
Nov 22 '18 at 11:51
add a comment |
1 Answer
1
active
oldest
votes
Use try_convert()
:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON LR.ReasonId = TRY_CONVERT(INT, EL.LeaveType);
You can also do this in the other direction:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
Then, work on fixing the data model. JOIN
keys should be of the same type. Such conversions have a drastic affect on performance.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53430313%2fsql-server-join-only-when-the-condition-is-number%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use try_convert()
:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON LR.ReasonId = TRY_CONVERT(INT, EL.LeaveType);
You can also do this in the other direction:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
Then, work on fixing the data model. JOIN
keys should be of the same type. Such conversions have a drastic affect on performance.
add a comment |
Use try_convert()
:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON LR.ReasonId = TRY_CONVERT(INT, EL.LeaveType);
You can also do this in the other direction:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
Then, work on fixing the data model. JOIN
keys should be of the same type. Such conversions have a drastic affect on performance.
add a comment |
Use try_convert()
:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON LR.ReasonId = TRY_CONVERT(INT, EL.LeaveType);
You can also do this in the other direction:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
Then, work on fixing the data model. JOIN
keys should be of the same type. Such conversions have a drastic affect on performance.
Use try_convert()
:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON LR.ReasonId = TRY_CONVERT(INT, EL.LeaveType);
You can also do this in the other direction:
SELECT *
FROM EmployeeLeave EL LEFT JOIN
MST_LeaveReason LR
ON CONVERT(VARCHAR(255), LR.ReasonId) = EL.LeaveType;
Then, work on fixing the data model. JOIN
keys should be of the same type. Such conversions have a drastic affect on performance.
answered Nov 22 '18 at 11:48
Gordon LinoffGordon Linoff
781k35310414
781k35310414
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53430313%2fsql-server-join-only-when-the-condition-is-number%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
If your
varchar
is only going to have a length of 1, why not usechar(1)
and save the overhead of having a "variable" length?– Larnu
Nov 22 '18 at 11:48
@Larnu:
VARCHAR()
is (fortunately?) not legal syntax. It's probably not shorthand forVARCHAR
-with-no-length-which-is-implicitly-1 in this case.– Jeroen Mostert
Nov 22 '18 at 11:51