여러분 모두에게,
우리는 당신의 도움을 찾고 있습니다. 평소와 같이 여러 테이블에서 데이터를 추출하는 쿼리를 만들고 있지만 두 기본 테이블 간에 Union을 수행하려고 합니다. SQL 쿼리가 어떻게 생겼는지에 대한 예는 다음과 같습니다. Query Builder를 사용하여 어떻게 이를 달성할 수 있습니까? 지금까지 UNION 문 앞의 쿼리의 첫 번째 부분만 사용하여 db를 쿼리할 수 있습니다. 우리는 JSL 책을 읽었지만 원하는 것을 찾을 수 없었습니다. 귀하의 도움에 감사드립니다!
따라서 원래 SQL 쿼리는 다음과 같습니다.
USE BLAH -- 이것은 DB의 이름입니다.
(선택하다
GENO.NAME AS [유전자형],
GENO.PEDIGREE AS [페디그리],
EXPMT.NAME AS [실험],
LOC.NAME을 [위치]로,
TRAITS.NAME을 [특성]으로,
연도를 [연도]로 의미,
MEANS.AVG AS [데이터]
BLAH.dbo.MEANS에서
내부 조인 블라 .dbo.GENO ON GENO.ID=MEANS.ENT1
내부 조인 블라 .dbo.EXPMT ON EXPMT.ID=MEANS.EXPT
내부 조인 블라 .dbo.LOC ON LOC.ID=EXPMT.LOC
내부 조인 블라 .dbo.TRAITS ON TRAITS.ID=MEANS.TRAITS
WHERE GENO.NAME IN ('a', 'b', 'c')
AND TRAITS.NAME = '수확'
AND LOC.NAME = '파고'
AND MEANS.YEAR IN ('2015','2016','2017'))
노동 조합(
선택하다
GENO.NAME AS [유전자형],
GENO.PEDIGREE AS [페디그리],
EXPMT.NAME AS [실험],
LOC.NAME을 [위치]로,
TRAITS.NAME을 [특성]으로,
MEANS2.YEAR를 [연도]로,
MEANS2.AVG AS [데이터]
에서 BLAH.dbo.MEANS2
내부 조인 블라 .dbo.GENO ON GENO.ID=MEANS2.ENT1
내부 조인 블라 .dbo.EXPMT ON EXPMT.ID=MEANS2.EXPT
내부 조인 블라 .dbo.LOC ON LOC.ID=EXPMT.LOC
내부 조인 블라 .dbo.TRAITS ON TRAITS.ID=MEANS2.TRAIT
WHERE GENO.NAME IN ('a', 'b', 'c')
AND TRAITS.NAME = 'ALPHA_AMYLASE'
AND LOC.NAME = '파고'
AND MEANS2.YEAR IN ('2015','2016','2017'))
특성별 주문.TBFLD_NAME
도와주셔서 감사합니다. 귀하의 권장 사항을 따르고 문제가 발생하면 알려 드리겠습니다.
좋은 하루 되세요! 오전
내가 아는 두 가지 옵션이 있습니다.
- 두 개의 쿼리를 실행하고 JSL을 사용하여 두 개의 결과 테이블을 연결합니다.dt1 << 연결(dt2);
- 새 SQL 쿼리 사용자 지정 쿼리를 사용합니다.
아래는 예시입니다 *. 2개의 테이블에서 이름이 일치하거나 테이블 #1(t1)에서 이름이 비어 있는(null) 모든 인스턴스를 찾습니다.이것은 JMP 테이블을 사용하기 때문에 귀하의 시나리오가 아니지만 CustomSQL()에서 SQL 문을 사용할 수 있음을 보여줍니다.
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
["Big Class Joins Table1" =>
"C:\temp\JSLC2_working\scripts\Big Class Joins Table1.jmp",
"Grade Level Joins Table2" =>
"C:\temp\JSLC2_working\scripts\Grade Level Joins Table2.jmp"]
),
QueryName( "SQLQuery1" ),
CustomSQL(
"SELECT t1.name, t1.age, t2.name AS \!"name 2\!", t2.\!"grade level\!"
FROM \!"Big Class Joins Table1\!" t1
LEFT OUTER JOIN \!"Grade Level Joins Table2\!" t2
ON ( t1.name = t2.name )
UNION ALL
SELECT t1.name, t1.age, t2.name AS \!"name 2\!", t2.\!"grade level\!"
FROM \!"Grade Level Joins Table2\!" t2
LEFT OUTER JOIN \!"Big Class Joins Table1\!" t1
ON ( t2.name = t1.name )
WHERE t1.name IS NULL
"
)
) << Run
이 블로그에는 더 나은 솔루션을 제공할 수 있는 많은 SQL 전문가(저는 전문가가 아닙니다)가 있다고 확신합니다.
*JSL Companion, 2nd Ed용으로 작성된 스크립트의 초기 버전입니다.
@anaheilman ,
나에게 명확하지 않은 것은 쿼리의 일부가 작동한다고 말할 때 실제로 의미가 없다는 것입니다. "Means"와 "Means2"라는 2개의 테이블이 있는 경우 Join 기능을 사용하여 Union과 동일한 작업을 수행할 수 있습니다. SQL 쿼리가 이미 통합을 수행하는 경우 Connect DataBase()를 사용할 수 있어야 합니다.
@anaheilman ,
작업 중인 SQL 쿼리가 있다고 가정해 보겠습니다. 작업 중인 경우 Open Database()를 사용하여 JMP를 데이터베이스에 연결하고 SQL 쿼리 결과를 가져올 수 있어야 합니다.
파일 ==> 스크립팅 인덱스 ==> "데이터베이스 열기"