Swapping where condition columns for tuning
Hi all,
I am having two tables (Table1 and Table2). Both tables are having primary key, those are same. Table1 having large data and Table2 is having half of Table1 data.
My question is i want to select from these two tables. Which one is better in where condition
select * from Table1, Table2 where
Table1.col1 = Table2.col1 OR Table2.col1 = Table1.col1
I tested with set timing on in SQLPLUS. Table2.col1 = Table1.col1 is efficient.
i.e. table with less data on LEFT side of the where condition.
Am i correct ? and anymore ideas how to make it more efficient.
Thanks in advance,
Pal
There shouldn't be difference in the way you write queries. The timing difference may depend on different factors not only in the way you write SQL.
Anyway to tell the optimizer that you prefer to scan some tables first you can use the LEADING hint.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/sql_elements006.htm#SQLRF50705
Bye Alessandro
Similar Messages
-
Where condition for reading infotype while using ldb
hi
i want to read info from infotype p0000
using where condition eg: for pernr = ' '.
i am using LDB pnp.
how can i put the where condition while using macro
rp-provide-from-last.
regards
csin fact you don't have to get the values, you only need to tell to the program to take them into account :
GET PRPS.
CHECK SELECT-OPTIONS. -
Adding WHERE condition in "Calculations" tab of SSAS Cube Designer
HI,
I am using SSAS 2012 version to develop SSAS cube
and need help on following scenario :
In the BIDS designer, on the Calculations tab:
I am creating one calculated member called [% Jobs] for which I am writing MDX expression as below :
'([Measures].[On Time jobs]/[Measures].[Total Jobs])*100'
Till here all is well...
Now, How do I implement here WHERE condition ?
For ex., in my fact table I have a column Line_Number
I want to implement above MDX expression such that it only considers Line_Number=1
while doing the above calculation.
Hope it is clear.
Thanks...I tried with below method :
While keeping the expression as it is :
'([Measures].[On Time jobs]/[Measures].[Total Jobs])*100'
What I did was in the partition tab, i choose option "Query binding" (instead of Table binding) and over there I mentioned the condition
WHERE Line_Number=1
So it should do the calculations only for the first line.
Is this approach also correct ?
Thanks -
How to select data from a table using a date field in the where condition?
How to select data from a table using a date field in the where condition?
For eg:
data itab like equk occurs 0 with header line.
select * from equk into table itab where werks = 'C001'
and bdatu = '31129999'.
thanks.Hi Ramesh,
Specify the date format as YYYYMMDD in where condition.
Dates are internally stored in SAP as YYYYMMDD only.
Change your date format in WHERE condition as follows.
data itab like equk occurs 0 with header line.
select * from equk into table itab where werks = 'C001'
and bdatu = <b>'99991231'.</b>
I doubt check your data base table EQUK on this date for the existince of data.
Otherwise, just change the conidition on BDATU like below to see all entries prior to this date.
data itab like equk occurs 0 with header line.
select * from equk into table itab where werks = 'C001'
and <b> bdatu <= '99991231'.</b>
Thanks,
Vinay
Thanks,
Vinay -
Dynamic select query with dynamic where condition
Hi all,
I want to use the dynamic select query with dynamic where condition. For that I used the below code but I am getting dump when using this code.
Please advice, if there is any other way to achieve this requirement.
Thanks,
Sanket Sethi
Code***************
PARAMETERS: p_tabnam TYPE tabname,
p_selfl1 TYPE edpline,
p_value TYPE edpline,
p_where1 TYPE edpline .
DATA: lt_where TYPE TABLE OF edpline,
lt_sel_list TYPE TABLE OF edpline,
l_wa_name TYPE string,
ls_where TYPE edpline,
l_having TYPE string,
dref TYPE REF TO data,
itab_type TYPE REF TO cl_abap_tabledescr,
struct_type TYPE REF TO cl_abap_structdescr,
elem_type TYPE REF TO cl_abap_elemdescr,
comp_tab TYPE cl_abap_structdescr=>component_table,
comp_fld TYPE cl_abap_structdescr=>component.
TYPES: f_count TYPE i.
FIELD-SYMBOLS : <lt_outtab> TYPE ANY TABLE,
* <ls_outtab> TYPE ANY,
<l_fld> TYPE ANY.
struct_type ?= cl_abap_typedescr=>describe_by_name( p_tabnam ).
elem_type ?= cl_abap_elemdescr=>describe_by_name( 'F_COUNT' ).
comp_tab = struct_type->get_components( ).
comp_fld-name = 'F_COUNT'.
comp_fld-type = elem_type.
APPEND comp_fld TO comp_tab.
struct_type = cl_abap_structdescr=>create( comp_tab ).
itab_type = cl_abap_tabledescr=>create( struct_type ).
l_wa_name = 'l_WA'.
CREATE DATA dref TYPE HANDLE itab_type.
ASSIGN dref->* TO <lt_outtab>.
*CREATE DATA dref TYPE HANDLE struct_type.
*ASSIGN dref->* TO <ls_outtab>.
* Creation of the selection fields
APPEND p_selfl1 TO lt_sel_list.
APPEND 'COUNT(*) AS F_COUNT' TO lt_sel_list.
** Creation of the "where" clause
*CONCATENATE p_selfl1 '= '' p_value ''.'
* INTO ls_where
* SEPARATED BY space.
*APPEND ls_where TO lt_where.
* Creation of the "where" clause
APPEND p_where1 TO lt_where.
* Creation of the "having" clause
l_having = 'count(*) >= 1'.
* THE dynamic select
SELECT (lt_sel_list)
FROM (p_tabnam)
INTO CORRESPONDING FIELDS OF TABLE <lt_outtab>.
* WHERE (lt_where).Hi Sanket,
The above given logic of mine works for you, put the code in the If condition and try-
just like below:
IF NOT P_EBELN IS INITIAL.
lt_where = '& = ''&'' '.
REPLACE '&' WITH p_ebeln INTO lt_where.
REPLACE '&' WITH field_value INTO lt_where.
SELECT (lt_sel_list) INTO CORRESPONDING FIELDS OF TABLE <lt_outtab>
FROM (p_tabnam)
WHERE (lt_where).
ENDIF.
thanks\
Mahesh -
Where condition for a column in BMM
Hi Gurus,
I have a requirement where in the BMM(The LTS for this logical table is say 'Fact'), I need a logical column with the following definition.
count(Dim.status) where Dim.status = ' Accepted' (I didnt add the Dim table to the LTS yet, should I?)
I know that we can do a count(Dim.status) in the column source . but for the where Dim.status = ' Accepted' part im not sure what to do.
Should I bring the Dim table as a LTS and define the 'where' condition in the content tab? will that work?
but what if I have another logical column where I need dim.Status = 'Declined'( we have many more status)
Plz helpThe suggest statement as Filter(count(Fact.Dollars) Using("dim.status = 'accepted'))
is based on Answers, this would care about the column is available in Subject Area or not thats it.
The same kind of functionality can get the using rpd.
There you might need to map/add (fact source properties and then map using pencil icon on 11g add button in 10g) the dim table to the fact
so that you can get the expression based on physical columns as
case when dim.status = 'accepted' then Fact.Dollars else 0 end
use Aggregate tab for sum;
Since you are using Fact.Dollars it suppose to be sum, ROW_WIDs go by counts
Hope this helps :) for more Qs send email
If helps mark -
Concatenation error - when i use text column value in where condition.
Hi,
i am creating Materialized view using few columns from two tables and as per requirement i need to prepare select statement with where condition in another column.(new column)
i tried like below....
create materialized view MAIN
refresh force on demand
as
select
a.table_name,
a.column_name,
b.trial_name,
'select * from '||a.table_name||' where '||a.column_name|| ' = '|| b.trial_name||';' "QUERY"
from
exp_csv_tB a,
exp_csv_tr b;
a.table name value is : monitoring_table
a.column_name value is : study
b.trial_name = fty777
Materialized view created with extra column but it is not added '' (codes) to text value in where condition.
output which i got is :
select * from monitoring_table where study = fty777;
but
i need output like
select * from monitoring_table where study = 'fty777';
fty777 value should be in codes like 'fty777'. i read some articles but didnt get this example.
please help.Try this:
CREATE MATERIALIZED VIEW main
REFRESH FORCE ON DEMAND
AS
SELECT
a.table_name,
a.column_name,
b.trial_name,
'select * from '||a.table_name||' where '||a.column_name|| ' = '''|| b.trial_name||'';'' "QUERY"
FROM
exp_csv_tb a,
exp_csv_tr b;
You have to give double single codes for semi-colons ..
Regards.. -
Conditional Columns in Select Statement for any type of Report
Okay so I had a requirement to conditionally show columns on a report when the data in the column was not null. I played around the "vertical" report mentioned in other posts but it didn't work well for my needs. Also I know that there is a javascript solution for this as demonstarted in Denes Kubicek's app (which was copied from Vikas :) ). Anyways listed below is my approach.... Hope this can help anyone else out as it's just pl/sql returning sql. Also you will need execute on dbms_sql for this to work.
declare
v_count number := 0;
v_row_count number := 0;
v_col_name varchar2(100);
q varchar2(4000) := 'select ';
v_table_name varchar2(100) := :SOME_TABLE_NAME;
v_id varchar2(100) := 'num = '||:SOME_APEX_VALUE;
my_c INTEGER;
fdbk INTEGER;
statement varchar2(2000);
cval_out varchar2(2000);
nval_out number;
begin
select count(*) into v_count from cols
where table_name = v_table_name;
for counter in 1..v_count
loop
select column_name into v_col_name
from cols where table_name = v_table_name
and counter = column_id;
statement := 'select count(*) '||
' from '||v_table_name||
' where '||v_col_name||' is not null and '||v_id;
my_c := dbms_sql.open_cursor;
dbms_sql.parse(my_c,statement,dbms_sql.native);
dbms_sql.define_column(my_c,1,nval_out);
fdbk := dbms_sql.execute(my_c);
LOOP
exit when dbms_sql.fetch_rows(my_c) = 0;
dbms_sql.column_value(my_c,1,nval_out);
end loop;
v_row_count := nval_out;
dbms_sql.close_cursor(my_c);
if v_row_count > 0 then
q:=q||v_col_name||',';
end if;
end loop;
if(substr(q,length(q),1) = ',') then
q:= substr(q,0,length(q)-1);
end if;
q:= q||' from '||v_table_name||' where '||v_id;
end;Hope this helps...
-David
Message was edited by:
rdpatricHi Gints,
Thank you for your reply. This is my query and
nvl(TICKET_JOIN.TDQRLV,0) ACC_SHIPPED_QTY,
TICKET_JOIN.TDSOQS QUANTITY_TICKETED are the columns tha's creating issue. If I comment those columns Index is accessed properly.
select
'TKT' SOURCE,
TICKET_JOIN.TKDO01 HIRE_ID,
TICKET_JOIN.TKQ101 TRUCK_ID,
TICKET_JOIN.TKVEHT TRUCK_TYPE,
1 TRUCK_COMM,
nvl(TKCMP1,0) TICKET_NUM,
nvl(TKADTM,0) TICKET_TIME,
--TICKET_JOIN.TDSOQS QUANTITY_TICKETED,
0 CHECKIN_TIME,
--nvl(TICKET_JOIN.TDQRLV,0) ACC_SHIPPED_QTY,
nvl(DDADTM,0) START_TIME
from
(select
TICKET.TKCMP1,
TICKET.TKDO01,
TICKET.TKQ101,
TICKET.TKADTM ,
TICKET.TKVEHT,
TICKET_DETAILS.TDAITM ,
TICKET_DETAILS.TDQRLV ,
TICKET_DETAILS.TDSOQS ,
TICKET.TKCNTF,
TICKET.TKTRDJ,
TICKET.TK58GA8
from
CRPDTA.F5800091 TICKET_DETAILS ,
CRPDTA.F5800090 TICKET
where TICKET.TKCMP1 = TICKET_DETAILS.TDCMP1
and TICKET.TKTRDJ = TICKET_DETAILS.TDTRDJ
and TICKET.TKTRDJ = 107085
and TICKET.TKEV12 <> 'Y'
and TICKET.TK58GA8='ECSEO'
and TICKET.TKCNTF = '11') TICKET_JOIN ,
(select
DDDOCO,
DDCNTF,
DDQTFN,
DDAITM,
DDADTM,
DD58GA8,
DDTRDJ
from
CRPDTA.F5800051 ORDER_DETAILS,
CRPDTA.F5800050 ORDER_HEADER
where
ORDER_HEADER.DHDOCO = ORDER_DETAILS.DDDOCO
and ORDER_HEADER.DHTRDJ = ORDER_DETAILS.DDTRDJ
and ORDER_HEADER.DH58GA8 = ORDER_DETAILS.DD58GA8
and ORDER_HEADER.DHDCTO = ORDER_DETAILS.DDDCTO
/*and
(ORDER_HEADER.DHTRDJ = 107085
OR (ORDER_HEADER.DHTRDJ = 107084 and ORDER_HEADER.DHEV04='Y')
and TRIM(ORDER_HEADER.DH58GA8) = 'ECSEO'
and TRIM(ORDER_DETAILS.DDCNTF) = '11' ) ORDER_VIEW
where TICKET_JOIN.TKTRDJ = ORDER_VIEW.DDTRDJ
and TICKET_JOIN.TDAITM = ORDER_VIEW.DDAITM
and TICKET_JOIN.TKCNTF = ORDER_VIEW.DDCNTF
and TICKET_JOIN.TK58GA8 = ORDER_VIEW.DD58GA8
and NOT EXISTS ( select 1 from CRPDTA.F5800120 TRUCK_ASSIGNMENT
where TATRDJ = 107085
and TACNTF = '11'
and TA58GA8 = 'ECSEO'
and TICKET_JOIN.TKQ101||TICKET_JOIN.TKVEHT = TAQ101||TAVEHT )
Thanks
GM -
Where condition on date column using OleDb Command?
Hi,
How to read date column from excel sheet usign OleDb command. Below code failing .
OleDbCommand cmd = new OleDbCommand("SELECT Column1 FROM [sheet1$] WHERE createdDate < ="+Convert.ToDateTime("3/24/2015")+" ", connection);
OleDbDataReader dr = cmd.ExecuteReader();
Syntax error (missing operator) in query expression 'LastRun < =3/24/2015 12:00:00 AM'.
How to write a where condition on date column excel sheet?
Thanks
PS.Shakeer HussainHi PS.Shakeer Hussain,
In Excel, we store these data in excel is string type. Based on your code, it is dataTime type. So if fails when compare with dataTime and string.
Please try the following code, Useing DateTime.ToOADate Method to convert to the equivalent OLE Automation date. It works fine on my side.
OleDbDataAdapter dbAdapter = new OleDbDataAdapter("select * from [Sheet1$] WHERE createdDate < "+DateTime.Parse("3/29/2015").ToOADate(), connExcel);
Best regards,
Kristin
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
For all entries Where condition character length partilally has to be used
Hi,
I need to fetch all the data reocrds of one internal table into the other with the condition that in one of the field of first internal table only partial length of the character has to be used as a where condition.
Example:
Select xxxx
yyyyy
zzzzz
into it_tab2
for all entries in itab1
where field2 = itab1-field1(4).
where field1 of itab1 has length of 8 and field2 belongs to itab2.
As it throws the error msg :
it will ignore the length restriction mentioned in where condition of the for all entriesHi.
If you are trying to fetch from any database table based on your modified table use this logic.
Dfine another internal table same as itab1, with field one lenght as 4 char.
ex:
data: begin of it_tab2.
field1(4),
end of it_tab2.
loop at it_tab1.
it_tab2 = itab1+0(4).
append it_tab2.
clear it_tab2.
endloop.
now you can fetch from database table....using it_tab2.
Select xxxx
yyyyy
zzzzz
into it_tab3
for all entries in itab2
where field2 = itab2-field1(4).
If you only want to move the entries form one internal table to another internal table and truncate the field1 of itab1.
then no need to use any for all entries...
apply this logic
data: begin of it_tab2.
field1(4),
end of it_tab2.
loop at it_tab1.
it_tab2 = itab1+0(4).
append it_tab2.
clear it_tab2.
endloop.
Regards,
Satish -
Dynamic component in WHERE-condition for LOOP AT ?
i want to make
loop at itab where (dynamic field) > 0
how i can make it...
Edited by: Thomas Zloch on Mar 2, 2010 2:47 PMI thought it's funny.
And the problem can maybe be solved by using a completely dynamic where-condition, not just a dynamic component.
http://help.sap.com/abapdocu_70/en/ABAPLOOP_AT_ITAB_COND.htm#!ABAP_ADDITION_4@4@
Thomas
P.S. meaningless subject enhanced, and please take the time to say hi and please when asking for help. Thanks. -
Passing the column name on Where condition based on input parameter
Hi,
I am using Oracle10g. Following are my table schema.
Table Name : Codes
Columns( ID, Level0, Level1,Level2)
View Name : SampleView
I have a scenario : A parameter will be passed to my view from C# application. I need to cut the last 4 places of the parameter and need to check 4 conditions as follows :
1. IF last 4 places of parameter contains the value as "AMPD" then pass level0 column on where condition.
Sample code : A123XPAMPD
Expeted Result: Select * from Codes where Level0 ='A123XPAMPD'
2. IF last 4 places of parameter contains the value as "Alpha numeric" then pass level1 column on where condition.
Sample code : A123XPAA00
Expeted Result: Select * from Codes where Level1 ='A123XPAA00'
3. IF last 4 places of parameter contains the value as 0000 then pass level1 column on where condition.
Sample code : A123XP0000
Expeted Result: Select * from Codes where Level1 ='A123XP0000'
4. IF last 4 places of parameter contains the value as (cannot be all 0's) and cannot contain "Alphabets" then pass level2 column on where condition.
Sample code : A123XP1001
Expeted Result: Select * from Codes where Level2 ='A123XP1001'
Could any one please help me on writing this logic inside the view.
Thanks in advance.Do you want to make sure that at least one alphabet and one number is there?
select case
when regexp_like('1111','^[a-zA-Z]+$') -"This says - Only alphabets, not even space
THEN 'Alphabets'
when regexp_like('1111','^[a-zA-Z0-9]*$') --"This says - Only alpha-numeric, not even space
and regexp_like('1111','[a-zA-Z]') --"To make sure atleast one alphabet is there
and regexp_like('1111','[0-9]') --"To make sure atleast one number is there
THEN 'AlphaNumeric'
else 'NULL' --"This is a string. Not actual NULL
end
from dual;
{code} -
Hi All,
I am a newbie for T-Sql, I came across a SP where multiple tables are engaged using multiple joins but the where clause contain a column field without any table reference and assigned for an incoming variable,like
where 'UserId = @UserId'
instead - no table reference like 'a.UserId = @Userid' ............ Can any please do refer to me any material that clears my mind regarding such issue................... help is appreciated.
Thank You.As suggested above, use table alias with columns for unique referencing and to make the code easier to read.
BOL example for table aliasing:
USE AdventureWorks;
GO
SELECT S.CustomerID, S.Name AS Store, A.City, SP.Name AS State, CR.Name
AS CountryRegion
FROM Sales.Store AS S
JOIN Sales.CustomerAddress AS CA ON CA.CustomerID = S.CustomerID
JOIN Person.Address AS A ON A.AddressID = CA.AddressID
JOIN Person.StateProvince SP ON
SP.StateProvinceID = A.StateProvinceID
JOIN Person.CountryRegion CR ON
CR.CountryRegionCode = SP.CountryRegionCode
ORDER BY S.CustomerID ;
GO
GO
LINK:
http://technet.microsoft.com/en-us/library/ms124824(v=sql.100).aspx
Check the use of TABLE ALIASes and COLUMN ALIASes in the following blog:
http://www.sqlusa.com/bestpractices2005/organizationtree/
Without the use of aliases the code would become unreadable.
Kalman Toth Database & OLAP Architect
Free T-SQL Scripts
New Book / Kindle: Exam 70-461 Bootcamp: Querying Microsoft SQL Server 2012 -
Significance of '#' for WHERE condition expressions
What is the purpose of '#' when querying in a form field straight or using the text item editor.
Thanks
GusWhen a block is in ENTER QUERY mode, you typically enter values in columns, and the query will search for rows with equal values. But if you want rows where a column can have several values, you could enter in that column:#in ('Value1','Value2','Value3','etc.')The # represents the name of the column in the where clause that Forms builds.
-
How to pass where condition to report for condition
hello people ,
i want to pass where condition for the report statement .
for example ,
select ename from emp
i want to pass parameter carry <where deptno=40>
thanksGood Morning oracleuser,
If we understood correctly, Bind references (or bind variables) should use this issue.
a>select ename from emp where deptno= :Dept_Number
If you have any more questions, please post it.
Otherwise:
Mark Helpful or Answer accordingly.
Maybe you are looking for
-
My fan is loud when I use GarageBand or other video- or music-editing software for an extended period of time, but recently my MacBook's fan is loud all the time. Recently I have been using GarageBand and Audacity a lot, but even after I have closed
-
Itunes not installed correctly error 7, itunes not installed correctly error 7
When I updated itunes, it did not installcorrectly. I get " C:\Program files (x86)|iTunes|iTunes.exe R6034. An application has made an attempt to load the C runtime Library incorrectly Then when I retry, and it tries to load , I get " iTunes not
-
Tabs that are open when I close, won't reopen when I restart FF
Using FF 20.0.1 All of a sudden, today/yesterday, when I reopen FF, the tabs that were there when I closed are not there anymore----the only tab open is my homepage...... Yes, I do have "show my tabs from last time when I open FF" checked. What's up?
-
I'm looking some info about OWB repository info. How work etc. Maybe you know some books or pdf ? Thanks
-
Can pages spell check in Spanish?
My daughter is doing a paper for her Spanish class, and would like to spell check the document, Does Pages have the capability to spell check in languages other than English? Thanks for any and all helpful info.