SQL Help

  • I have a query that takes about a minute to run. Is it possible to make this query run faster?

    SELECT DISTINCT

    SUBSTRING(CONVERT(VARCHAR(6), REPLICATE('0',6 - DATALENGTH(LTRIM(STR(NAME_MASTER.id_num, 6))))

    + LTRIM(STR(NAME_MASTER.id_num, 6))), 1, 6) + ' ' + 'Y'

    + SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30)))

    + RTRIM(SUBSTRING(NAME_MASTER.first_NAME, 1, 30)) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.first_nAME, 1, 30)))

    + RTRIM(SUBSTRING(ISNULL(NAME_MASTER.middle_name, ''), 1, 1))

    + SPACE(1 - LEN(SUBSTRING(ISNULL(NAME_MASTER.MIDDLE_NAME, ''), 1, 1)))

    + ISNULL(RTRIM(CONVERT(VARCHAR(10), biograph_master.birth_dte, 101)),' ') + ' ' + SUBSTRING(address_master.ADDR_LINE_1, 1, 45)

    + SPACE(45 - LEN(SUBSTRING(address_master.ADDR_LINE_1, 1, 45)))

    + (SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45))

    + SPACE(45 - LEN(SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1,45)))

    + SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30) + SPACE(30 - LEN(SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30)))

    + SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2) + SPACE(2 - LEN(SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2)))

    + SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10) + SPACE(10 - LEN(SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10)))

    + 'S ' + ' ' + ' ' + SUBSTRING(STUD_TERM_SUM_DIV.DIV_CDE, 1, 5)

    + SPACE(5 - LEN(SUBSTRING(stud_term_sum_div.div_cde, 1, 5)))

    + SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5) + SPACE(5 - LEN(SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5)))

    + SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75) + SPACE(75 - LEN(SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75)))

    + SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1) + SPACE(1 - LEN(SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1)))

    FROM NAME_MASTER

    LEFT OUTER JOIN STUD_TERM_SUM_DIV

    ON STUD_TERM_SUM_DIV.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN BIOGRAPH_MASTER

    ON BIOGRAPH_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN ADDRESS_MASTER

    ON ADDRESS_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN TRANS_HIST

    ON TRANS_HIST.ID_NUM = NAME_MASTER.ID_NUM

    WHERE STUD_TERM_SUM_DIV.YR_CDE = @yr_cde

    AND STUD_TERM_SUM_DIV.TRM_CDE = @trm_cde

    AND TRANS_HIST.CHG_FEE_CDE = 'HI'

    AND ADDRESS_MASTER.ADDR_CDE = '*LHP'

    EXCEPT

    SELECT DISTINCT

    SUBSTRING(CONVERT(VARCHAR(6), REPLICATE('0', 6 - DATALENGTH(LTRIM(STR(NAME_MASTER.id_num, 6))))

    + LTRIM(STR(NAME_MASTER.id_num, 6))), 1, 6) + ' ' + 'Y'

    + SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30)))

    + RTRIM(SUBSTRING(NAME_MASTER.first_NAME, 1, 30)) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.first_nAME, 1, 30)))

    + RTRIM(SUBSTRING(ISNULL(NAME_MASTER.middle_name, ''), 1, 1))

    + SPACE(1 - LEN(SUBSTRING(ISNULL(NAME_MASTER.MIDDLE_NAME, ''), 1, 1)))

    + ISNULL(RTRIM(CONVERT(VARCHAR(10), biograph_master.birth_dte, 101)),' ') + ' ' + SUBSTRING(address_master.ADDR_LINE_1, 1, 45)

    + SPACE(45 - LEN(SUBSTRING(address_master.ADDR_LINE_1, 1, 45)))

    + (SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45))

    + SPACE(45 - LEN(SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45)))

    + SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30) + SPACE(30 - LEN(SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30)))

    + SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2) + SPACE(2 - LEN(SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2)))

    + SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10) + SPACE(10 - LEN(SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10)))

    + 'S ' + ' ' + ' ' + SUBSTRING(STUD_TERM_SUM_DIV.DIV_CDE, 1, 5)

    + SPACE(5 - LEN(SUBSTRING(stud_term_sum_div.div_cde, 1, 5)))

    + SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5) + SPACE(5 - LEN(SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5)))

    + SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75) + SPACE(75 - LEN(SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75)))

    + SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1) + SPACE(1 - LEN(SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1)))

    FROM NAME_MASTER

    LEFT OUTER JOIN STUD_TERM_SUM_DIV

    ON STUD_TERM_SUM_DIV.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN BIOGRAPH_MASTER

    ON BIOGRAPH_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN ADDRESS_MASTER

    ON ADDRESS_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN TRANS_HIST

    ON TRANS_HIST.ID_NUM = NAME_MASTER.ID_NUM

    WHERE ((STUD_TERM_SUM_DIV.YR_CDE = '2010')

    AND (STUD_TERM_SUM_DIV.TRM_CDE = 'fa')

    AND (TRANS_HIST.CHG_FEE_CDE = 'HI')

    AND (ADDRESS_MASTER.ADDR_CDE = '*LHP')

    )

    AND BIOGRAPH_MASTER.UDEF_1A_1 = 'W'

    Thanks

  • You could start from the EXCEPT, that generally involves a SORT DISTINCT on the two inputs.

    I think you should calculate the output field AFTER the except.

    As a side suggestion, nobody will take a look at your question if it contains 100+ rows of unformatted SQL, no table definition, no query plan.

    Take a look at this article and find out how to post performance problems[/url].

    I formatted your query in case you want to edit your initial post and replace it there.

    SELECT DISTINCT

    SUBSTRING(CONVERT(VARCHAR(6), REPLICATE('0',6 - DATALENGTH(LTRIM(STR(NAME_MASTER.id_num, 6))))

    + LTRIM(STR(NAME_MASTER.id_num, 6))), 1, 6) + ' ' + 'Y'

    + SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30)))

    + RTRIM(SUBSTRING(NAME_MASTER.first_NAME, 1, 30)) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.first_nAME, 1, 30)))

    + RTRIM(SUBSTRING(ISNULL(NAME_MASTER.middle_name, ''), 1, 1))

    + SPACE(1 - LEN(SUBSTRING(ISNULL(NAME_MASTER.MIDDLE_NAME, ''), 1, 1)))

    + ISNULL(RTRIM(CONVERT(VARCHAR(10), biograph_master.birth_dte, 101)),' ') + ' ' + SUBSTRING(address_master.ADDR_LINE_1, 1, 45)

    + SPACE(45 - LEN(SUBSTRING(address_master.ADDR_LINE_1, 1, 45)))

    + (SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45))

    + SPACE(45 - LEN(SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1,45)))

    + SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30) + SPACE(30 - LEN(SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30)))

    + SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2) + SPACE(2 - LEN(SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2)))

    + SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10) + SPACE(10 - LEN(SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10)))

    + 'S ' + ' ' + ' ' + SUBSTRING(STUD_TERM_SUM_DIV.DIV_CDE, 1, 5)

    + SPACE(5 - LEN(SUBSTRING(stud_term_sum_div.div_cde, 1, 5)))

    + SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5) + SPACE(5 - LEN(SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5)))

    + SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75) + SPACE(75 - LEN(SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75)))

    + SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1) + SPACE(1 - LEN(SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1)))

    FROM NAME_MASTER

    LEFT OUTER JOIN STUD_TERM_SUM_DIV

    ON STUD_TERM_SUM_DIV.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN BIOGRAPH_MASTER

    ON BIOGRAPH_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN ADDRESS_MASTER

    ON ADDRESS_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN TRANS_HIST

    ON TRANS_HIST.ID_NUM = NAME_MASTER.ID_NUM

    WHERE STUD_TERM_SUM_DIV.YR_CDE = @yr_cde

    AND STUD_TERM_SUM_DIV.TRM_CDE = @trm_cde

    AND TRANS_HIST.CHG_FEE_CDE = 'HI'

    AND ADDRESS_MASTER.ADDR_CDE = '*LHP'

    EXCEPT

    SELECT DISTINCT

    SUBSTRING(CONVERT(VARCHAR(6), REPLICATE('0', 6 - DATALENGTH(LTRIM(STR(NAME_MASTER.id_num, 6))))

    + LTRIM(STR(NAME_MASTER.id_num, 6))), 1, 6) + ' ' + 'Y'

    + SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30)))

    + RTRIM(SUBSTRING(NAME_MASTER.first_NAME, 1, 30)) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.first_nAME, 1, 30)))

    + RTRIM(SUBSTRING(ISNULL(NAME_MASTER.middle_name, ''), 1, 1))

    + SPACE(1 - LEN(SUBSTRING(ISNULL(NAME_MASTER.MIDDLE_NAME, ''), 1, 1)))

    + ISNULL(RTRIM(CONVERT(VARCHAR(10), biograph_master.birth_dte, 101)),' ') + ' ' + SUBSTRING(address_master.ADDR_LINE_1, 1, 45)

    + SPACE(45 - LEN(SUBSTRING(address_master.ADDR_LINE_1, 1, 45)))

    + (SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45))

    + SPACE(45 - LEN(SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45)))

    + SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30) + SPACE(30 - LEN(SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30)))

    + SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2) + SPACE(2 - LEN(SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2)))

    + SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10) + SPACE(10 - LEN(SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10)))

    + 'S ' + ' ' + ' ' + SUBSTRING(STUD_TERM_SUM_DIV.DIV_CDE, 1, 5)

    + SPACE(5 - LEN(SUBSTRING(stud_term_sum_div.div_cde, 1, 5)))

    + SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5) + SPACE(5 - LEN(SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5)))

    + SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75) + SPACE(75 - LEN(SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75)))

    + SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1) + SPACE(1 - LEN(SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1)))

    FROM NAME_MASTER

    LEFT OUTER JOIN STUD_TERM_SUM_DIV

    ON STUD_TERM_SUM_DIV.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN BIOGRAPH_MASTER

    ON BIOGRAPH_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN ADDRESS_MASTER

    ON ADDRESS_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN TRANS_HIST

    ON TRANS_HIST.ID_NUM = NAME_MASTER.ID_NUM

    WHERE ((STUD_TERM_SUM_DIV.YR_CDE = '2010')

    AND (STUD_TERM_SUM_DIV.TRM_CDE = 'fa')

    AND (TRANS_HIST.CHG_FEE_CDE = 'HI')

    AND (ADDRESS_MASTER.ADDR_CDE = '*LHP')

    )

    AND BIOGRAPH_MASTER.UDEF_1A_1 = 'W'

    -- Gianluca Sartori

  • Ok, thanks. I will add the data definitions and the execution plan.

  • Looks the same to me but I didn't look really closely.

    SELECT DISTINCT

    SUBSTRING(CONVERT(VARCHAR(6), REPLICATE('0', 6 - DATALENGTH(LTRIM(STR(NAME_MASTER.id_num, 6))))

    + LTRIM(STR(NAME_MASTER.id_num, 6))), 1, 6) + ' ' + 'Y'

    + SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.LAST_NAME, 1, 30)))

    + RTRIM(SUBSTRING(NAME_MASTER.first_NAME, 1, 30)) + SPACE(30 - LEN(SUBSTRING(NAME_MASTER.first_nAME, 1, 30)))

    + RTRIM(SUBSTRING(ISNULL(NAME_MASTER.middle_name, ''), 1, 1))

    + SPACE(1 - LEN(SUBSTRING(ISNULL(NAME_MASTER.MIDDLE_NAME, ''), 1, 1)))

    + ISNULL(RTRIM(CONVERT(VARCHAR(10), biograph_master.birth_dte, 101)),' ') + ' ' + SUBSTRING(address_master.ADDR_LINE_1, 1, 45)

    + SPACE(45 - LEN(SUBSTRING(address_master.ADDR_LINE_1, 1, 45)))

    + (SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45))

    + SPACE(45 - LEN(SUBSTRING(ISNULL(address_master.ADDR_LINE_2, ''), 1, 45)))

    + SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30) + SPACE(30 - LEN(SUBSTRING(ISNULL(address_master.CITY, ''), 1, 30)))

    + SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2) + SPACE(2 - LEN(SUBSTRING(ISNULL(address_master.STATE, ''), 1, 2)))

    + SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10) + SPACE(10 - LEN(SUBSTRING(ISNULL(address_master.ZIP, ''), 1, 10)))

    + 'S ' + ' ' + ' ' + SUBSTRING(STUD_TERM_SUM_DIV.DIV_CDE, 1, 5)

    + SPACE(5 - LEN(SUBSTRING(stud_term_sum_div.div_cde, 1, 5)))

    + SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5) + SPACE(5 - LEN(SUBSTRING(ISNULL(biograph_master.citizen_of, ''), 1, 5)))

    + SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75) + SPACE(75 - LEN(SUBSTRING(ISNULL(NAME_MASTER.EMAIL_ADDRESS, ''), 1, 75)))

    + SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1) + SPACE(1 - LEN(SUBSTRING(ISNULL(BIOGRAPH_MASTER.GENDER, ''), 1, 1)))

    FROM NAME_MASTER

    LEFT OUTER JOIN STUD_TERM_SUM_DIV

    ON STUD_TERM_SUM_DIV.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN BIOGRAPH_MASTER

    ON BIOGRAPH_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN ADDRESS_MASTER

    ON ADDRESS_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    LEFT OUTER JOIN TRANS_HIST

    ON TRANS_HIST.ID_NUM = NAME_MASTER.ID_NUM

    WHERE TRANS_HIST.CHG_FEE_CDE = 'HI'

    AND ADDRESS_MASTER.ADDR_CDE = '*LHP'

    AND

    (

    (

    STUD_TERM_SUM_DIV.YR_CDE = '2010'

    AND STUD_TERM_SUM_DIV.TRM_CDE = 'fa'

    AND BIOGRAPH_MASTER.UDEF_1A_1 = 'W'

    )

    OR

    (

    STUD_TERM_SUM_DIV.YR_CDE = @yr_cde

    AND STUD_TERM_SUM_DIV.TRM_CDE = @trm_cde

    )

    )

  • My format is not staying when I paste it in. Is there a different tool I can use?

  • Remove spaces from these tags:

    [/code ]

  • My query was a brain fart - it isn't logically the same.

  • I was able to figure it out myself.

    select distinct substring(convert(varchar(6), replicate('0',6-datalength(ltrim(str (NAME_MASTER.id_num,6))))

    + ltrim(str(NAME_MASTER.id_num,6))),1,6)

    + ' '

    + 'Y'

    + substring(NAME_MASTER.LAST_NAME,1,30)+space(30-len

    (substring(NAME_MASTER.LAST_NAME,1,30)))

    + rtrim(substring(NAME_MASTER.first_NAME,1,30))+space(30-len

    (substring(NAME_MASTER.first_nAME,1,30)))

    + rtrim(substring(isnull(NAME_MASTER.middle_name,''),1,1))+ space(1-len

    (substring(isnull(NAME_MASTER.MIDDLE_NAME,''),1,1)))

    + isnull(rtrim(CONVERT(varchar(10),biograph_master.birth_dte,101)),' ')

    + ' '

    + substring(address_master.ADDR_LINE_1,1,45)+ space(45-len

    (substring(address_master.ADDR_LINE_1,1,45)))

    + (substring(isnull(address_master.ADDR_LINE_2,''),1,45))+ space(45-len

    (substring(isnull(address_master.ADDR_LINE_2,''),1,45)))

    + substring(ISNULL(address_master.CITY,''),1,30)+ space(30-len

    (substring(ISNULL(address_master.CITY,''),1,30)))

    + substring(ISNULL(address_master.STATE,''),1,2)+ space(2-len

    (substring(ISNULL(address_master.STATE,''),1,2)))

    + substring(ISNULL(address_master.ZIP,''),1,10)+ space(10-len

    (substring(ISNULL(address_master.ZIP,''),1,10)))

    + 'S '

    + ' '

    + ' '

    + substring(STUD_TERM_SUM_DIV.DIV_CDE,1,5) + space(5-len

    (substring(stud_term_sum_div.div_cde,1,5)))

    + substring(isnull(biograph_master.citizen_of,''),1,5)+ space(5-len

    (substring(isnull(biograph_master.citizen_of,''),1,5)))

    + substring(isnull(NAME_MASTER.EMAIL_ADDRESS,''),1,75)+ space(75-len

    (substring(isnull(NAME_MASTER.EMAIL_ADDRESS,''),1,75)))

    + substring(isnull(BIOGRAPH_MASTER.GENDER,''),1,1)+ space(1-len

    (substring(isnull(BIOGRAPH_MASTER.GENDER,''),1,1)))

    from NAME_MASTER left outer join STUD_TERM_SUM_DIV on STUD_TERM_SUM_DIV.ID_NUM = NAME_MASTER.ID_NUM

    left outer join BIOGRAPH_MASTER on BIOGRAPH_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    left outer join ADDRESS_MASTER on ADDRESS_MASTER.ID_NUM = NAME_MASTER.ID_NUM

    left outer JOIN TRANS_HIST ON TRANS_HIST.ID_NUM = NAME_MASTER.ID_NUM

    WHERE stud_term_sum_div.ID_NUM not in (select ID_NUM from BIOGRAPH_MASTER where udef_1a_1 ='W')

    and stud_term_sum_div.yr_cde =:yr_cde

    and STUD_TERM_SUM_DIV.TRM_CDE =:trm_cde

    AND TRANS_HIST.CHG_FEE_CDE = 'HI'

    and ADDRESS_MASTER.ADDR_CDE = '*LHP'

  • Well done, and thanks for sharing.

    -- Gianluca Sartori

Viewing 9 posts - 1 through 8 (of 8 total)

You must be logged in to reply to this topic. Login to reply